Это довольно близко:
# Generate sample data (I'm too lazy to type out the full labels)
df <- data.frame(
perc = c(60, 36, 44, 41, 42, 57, 34, 52),
type = rep(c("blue", "green"), 4),
label = rep(c(
"Individual reports created as needed",
"Regular reports on single topics",
"Analytics using data integrated from multiple systems",
"Business unit-specific dashboards and visuals"), each = 2))
library(ggplot2)
ggplot(df, aes(1, perc, fill = type)) +
geom_col(position = "dodge2") +
scale_fill_manual(values = c("turquoise4", "forestgreen"), guide = FALSE) +
facet_wrap(~ label, ncol = 1, strip.position = "bottom") +
geom_text(
aes(y = 1, label = sprintf("%i%%", perc)),
colour = "white",
position = position_dodge(width = .9),
hjust = 0,
fontface = "bold") +
coord_flip(expand = F) +
theme_minimal() +
theme(
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
strip.text = element_text(angle = 0, hjust = 0, face = "bold"))
![enter image description here](https://i.stack.imgur.com/PBrlJ.png)
Несколько объяснений:
- Мы используем уклоненные столбцы и соответствующие уклоненные метки с
position = "dodge2"
(обратите внимание, что для этого требуется ggplot_ggplot2_3.0.0
, в противном случае используйте position = position_dodge(width = 1.0)
) и position = position_dodge(width = 0.9)
соответственно.
- Мы используем
facet_wrap
и форсируем макет из одной колонки; полосовые надписи перемещаются вниз.
- Мы вращаем весь график с помощью
coord_flip(expand = F)
, где expand = F
гарантирует, что выровненные по левому краю (hjust = 0
) тексты фасетных полос выровнены с 0.
- Наконец, мы настраиваем тему, чтобы увеличить общее эстетическое сходство.