Одна стратегия состоит в том, чтобы использовать вторичную ось и метки для аннотирования вашего бара.
Это немного сложно, потому что только непрерывные шкалы могут иметь вторичную ось.
Я использовал следующие data.frame
для целей тестирования:
GHG <- data.frame(Avg = c(50, 37, 62), Min = c(10, 25, 25), Max = c(1000, 50, 80), Study = c("A", "B", "C"))
Код:
ggplot() +
geom_crossbar(data=GHG, aes(x=as.numeric(Study), y=Avg, ymin=Min, ymax=Max),
fill="white", width=0.3) +
coord_cartesian(ylim=c(0, 100), clip = "on") +
scale_x_continuous(position = "top",
breaks = 1:length(unique(GHG$Study)),
labels = c(1000, rep("", length(unique(GHG$Study)) - 1)),
sec.axis = sec_axis(~.,
breaks = 1:length(unique(GHG$Study)),
labels = rep("", length(unique(GHG$Study))))) +
labs(x="", y="g CO2-eq.") +
theme(legend.position = "bottom",
axis.text.x = element_text(angle=0, vjust=1, hjust=0.5),
panel.grid.major.x= element_blank(),
panel.grid.minor = element_blank(),
plot.margin = unit(c(1,3,1,1),"lines"),
axis.ticks.x.top = element_blank(),
axis.text.x.top = element_text(size = 14, color = "black", margin = margin(b = 5)))
подробности:
aes
слегка изменен, чтобы обеспечить непрерывную шкалу: aes(x=as.numeric(Study), y=Avg, ymin=Min, ymax=Max)
В coord_cartesian(ylim=c(0, 100), clip = "on")
: для клипа установлено значение on
, чтобы обрезать часть баров, выходящую из области графика.
Добавьте и настройте непрерывную шкалу для X сверху: scale_x_continuous(position = "top",
Вручную добавить перерывы для каждого значения обучения: breaks = 1:length(unique(GHG$Study)),
Маркируйте первый разрыв текстом, который вы хотите добавить, остальные разрывы не имеют текста: labels = c("text", rep("", length(unique(GHG$Study)) - 1)),
Добавьте дополнительную ось, чтобы отметки были внизу. Если вы не хотите их, это не обязательно: sec.axis = sec_axis(~.,
Вручную установите разрывы для непрерывной шкалы: breaks = 1:length(unique(GHG$Study)),
И добавьте пустые метки для воспроизведения вашего примера: labels = rep("", length(unique(GHG$Study))))) +
В методе theme
уберите галочки для верхней оси: axis.ticks.x.top = element_blank(),
И, наконец, настройте шрифт, цвет и все для верхней метки: axis.text.x.top = element_text(size = 14, color = "black", margin = margin(b = 5)))