【问题标题】:Add secondary x-axis to ggplot line graph, purely for information将辅助 x 轴添加到 ggplot 折线图,纯粹是为了提供信息
【发布时间】:2019-08-21 01:55:19
【问题描述】:

我有一张图表显示植物随时间的发展。作为时间,我使用生长期(它基本上是时间和温度的组合测量)。现在我想在顶部添加第二个 x 轴,显示“真实”时间,即从实验开始后的几周,以便观众可以更清楚地了解什么时候发生的事情。由于生长期的性质,它们不能以任何数学方式转换为周。所以我必须单独添加信息,例如 1 周为 500 gdd,2 周为 800 gdd,3 周为 1400 gdd。此信息不会与图表本身的内容以任何方式对应。

这是我的简单代码,用于生成度数日的图表。

my.df<-data.frame(ccc=seq(0,15,1),gdd=seq(0,1500,100))
ggplot(data=my.df, aes(x=gdd, y=ccc))+
  geom_line()

现在我只需要在 500、800 和 1400 gdd 的顶部表示 1、2 和 3 的轴刻度,以及一个表示“周”的轴标签。 有没有办法做到这一点?到目前为止,我唯一的想法是将它添加到 Photoshop 中,但那是作弊:)

【问题讨论】:

    标签: r ggplot2 axis


    【解决方案1】:

    您可以为此使用sec_axis()。由于您基本上只想手动标记几个位置,因此您不必担心复杂的转换。

    ggplot(data=my.df, aes(x=gdd, y=ccc))+
        geom_line() +
        scale_x_continuous(sec.axis = sec_axis(
            trans = ~ .,
            name = "Weeks",
            breaks = c(500, 800, 1400), 
            labels = c(1, 2, 3)))
    

    输出:

    【讨论】:

    • 我还有一个问题。如果我想添加日历月而不是添加周数怎么办?轴刻度将以相同的方式工作,但轴刻度标签必须位于 2 个刻度之间,例如,如果 jan 从 0 持续到 500 gdd,feb 从 500 持续到 800,并且从 800 持续到 1400。那会是也可以吗?
    • 在刻度之间出现刻度标签在ggplot 中可能会很棘手,尤其是因为sec_axis() 似乎不支持minor_breaks。有时最好使用facet_wrap()facet_grid() 来处理这类事情。
    • 实际上,我刚刚找到了一种方法来完成月份的事情(如果有些不雅),方法是从您的建议中删除标签,并添加一个文本注释,并关闭 coord_cartesian() 中的剪辑。只是在这里添加记录。
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2019-09-19
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    相关资源
    最近更新 更多