【问题标题】:ggplot2 - annotate outside plotggplot2 - 注释外部情节
【发布时间】:2019-03-07 15:41:16
【问题描述】:

如何在绘图外插入注释?

我想在第一个小节顶部添加一个注释以表明它继续,例如最多 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"))

这是图表:

【问题讨论】:

  • 您确定不是因为您的注释的 y 位置太远超出图表的尺寸吗?如果您将其更改为 annotate("text", x=1, y=105, ...),这种情况是否仍然存在?
  • 是的,超出图表限制 (1,100) 的所有内容都将被删除。

标签: r ggplot2 annotate


【解决方案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") 中:clip 设置为on 以剪辑超出绘图区域的条形部分。

为顶部的 X 添加和配置连续刻度:scale_x_continuous(position = "top",

为 Study 的每个值手动添加中断: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)))

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多