【问题标题】:Show tick label outisde of plot area in ggplot?在ggplot的绘图区域之外显示刻度标签?
【发布时间】:2020-04-27 17:55:55
【问题描述】:

我正在使用ggplot 创建一个具有区域填充值的多面板图。我想准确地在最大 x 值(年份)处截断图表并仍然标记那一年。当我指定确切的值时,它不会打印最终值(当值 2001、2005 和 2010 由 breaks 设置时的结果显示在左侧)。我还想指定设置了哪些刻度值(默认没有意义,请参见右侧的打印输出示例)并且我已将轴刻度标签设置为包含 x 轴上的最后一个值,但它没有完全打印(它在绘图区域的边缘被切断)。我如何让 ggplot 显示最后一个值,因为我通过中断设置它?下面的代码是此处显示的虚拟示例。

编辑:将代码中的中断更正为 2001、2005、2010(不是 2100)。

set<-data.frame(year=c(2001:2010), values=c(1:10))
g1<-ggplot(set, aes(x=year,y=values))+
      geom_area(data=set)+
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
            panel.background = element_blank(), 
            axis.line = element_line(colour = "black"))+
      scale_x_continuous(expand=c(0, 0), breaks=c(2001, 2005, 2010)) + #label at 25-year intervals
      scale_y_continuous(expand = c(0, 0))


g2<-ggplot(set, aes(x=year,y=values))+
  geom_area(data=set)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), 
        axis.line = element_line(colour = "black"))+
  scale_x_continuous(expand=c(0, 0)) + #label at 25-year intervals
  scale_y_continuous(expand = c(0, 0))

ggarrange(g1, g2, nrow=1, ncol=2)

【问题讨论】:

  • 您是否尝试将limits = c(2001,2010) 添加到 scale_x_continuous?另外,你在 2001 年、2005 年和 2100 年有休息时间——这是故意的吗?
  • @Tjebo 添加limits = c(2001, 2010) 给出相同的结果(看不到最后一个值)。是的,我想设置精确的刻度标签,包括第一个和最后一个值以及一个中间值。
  • 我的意思是,你试过 2010 而不是 2100
  • 是的,你会讨厌看到你在 breaks= 参数中打错了字。 :/ 你有 2100 而不是 2010。它工作正常,虽然你得到一些“2010”标签由于情节边距剪裁而被切断。如果你得到这样的剪辑,你可以添加theme(plot.margin = margin(10,15,10,10, "points") 来添加一些填充(对我有用)。
  • @Tjebo 好吧,这是一个愚蠢的错字。我将解决最初的问题,使其成为 2010 年!我的实际数据集从 2001 年到 2100 年,但我已将其简化为此处的示例。我曾尝试更改 margincm 但我的轴仍然不存在所以我不太明白发生了什么但它适用于您建议的值。

标签: r ggplot2 axis


【解决方案1】:

也感谢@Tjebo 的建议...内在问题在于您的breaks 参数包含错字:)。使用2010 而不是2100 应该可以正常工作。哎呀!

但是,使用expand=c(0,0) 往往会导致轴刻度标签被切断,因为标签剪裁出边界。解决办法?只是扩大“界限”。在这里,您应该使用theme(plot.margin=... 将边距推出一点。 Some information can be found here to guide you,但实际上只是玩弄边距,注意格式通常是 theme(plot.margin = margin(t, r, b, l, unit))

其中:t、r、b、l分别代表“top”、“right”、“bottom”和“left”,unit可以是一些东西(这里我建议“points”)。话虽如此,我发现这适用于左侧情节的示例案例:

theme(plot.margin = margin(10,15,10,10, "points")

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多