如何在图外插入注释?
我想在第一个小节的顶部添加注释,以表示它继续进行,例如最多1000。如果我使用注释,则注释不会超出情节范围。 (请注意,我使用coord_cartesian
将y轴限制为100。)
这是我的代码。
plot <- ggplot() +
geom_crossbar(data=GHG, aes(x=Study, y=Avg, ymin=Min, ymax=Max),
fill="white", width=0.3) +
coord_cartesian(ylim=c(0, 100), clip="off") +
labs(x="", y="g CO2-eq.") +
annotate("text", x=1, y=150, label=c("150"), vjust=-1) +
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"))
这是图表:
答案 0 :(得分:1)
一种策略是使用辅助轴和标签来注释条。 这有点棘手,因为只有连续刻度可以具有辅助轴。
出于测试目的,我使用了以下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)))