Producing a bespoke plot like this in R isn't trivial. Firstly, you need to have your data in a format the lends itself to plotting:
df <- data.frame(Allocation = c(rep("Activation", 8), "Swap", "Unissued"),
Block = c(rep("Developer", 5), rep("Grant", 3), NA, NA),
Work = c("Company A / Company B", "Pre-company Work",
"Advisory", "Protocol Contributors",
"Developers / incentives", "General Support",
"Projects", "Market makers and advisory", NA, NA),
Percent = c(15.8, 0.9, 0.3, 0.7, 0.3, 2.4, 2.4, 7.2, 10, 60))
df
#> Allocation Block Work Percent
#> 1 Activation Developer Company A / Company B 15.8
#> 2 Activation Developer Pre-company Work 0.9
#> 3 Activation Developer Advisory 0.3
#> 4 Activation Developer Protocol Contributors 0.7
#> 5 Activation Developer Developers / incentives 0.3
#> 6 Activation Grant General Support 2.4
#> 7 Activation Grant Projects 2.4
#> 8 Activation Grant Market makers and advisory 7.2
#> 9 Swap <NA> <NA> 10.0
#> 10 Unissued <NA> <NA> 60.0
The left-hand plot can be created using ggplot
with polar co-ordinates, but you need to summarize your data first to add up all the percentages for each Allocation
group. You can make the labels curved with geomtextpath
:
library(tidyverse)
library(geomtextpath)
df %>%
group_by(Allocation) %>%
summarise(Percent = sum(Percent)) %>%
ggplot(aes(x = 1, y = Percent, fill = Allocation)) +
geom_col(color = "white") +
geom_textpath(aes(label = Allocation), colour = "white", spacing = 100,
angle = 90, size = 5, fontface = 2,
position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y", direction = -1) +
scale_x_continuous(limits = c(-0.5, 2)) +
scale_fill_manual(values = c("#4285f4", "#ea4335", "#fbbc04")) +
theme_void() +
theme(legend.position = "none")

You can change the colours inside scale_fill_manual
to suit your preference.
The right hand plot is even more involved, but hopefully this is enough to get you started.