微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ggplot:根据月份调整轴空间

如何解决ggplot:根据月份调整轴空间

更新:

如何修改以下 ggplot 以获得以下内容

  1. X 轴应该调整几个月,即基线到 6 个月应该更短,6 个月到 24 个月应该更长,具体取决于时间点之间的月数。 (解决方案如下)

  2. 在 X 轴上包括 24 个月到 48 个月之间的休息时间(比如 36 个月)。

  3. 通过减少基线之前和 48 个月之后的空白来使图更大。 (下面的解决方案)

感谢您的帮助!

fat <- structure(list(study_group = structure(c(1L,1L,2L,2L),.Label = c("Intervention group","Control group"
),class = "factor"),mean1 = c(37.02,32.95,34.18,36.38,37.1,37.27,37.64,38.22),se1 = c(0.22,0.3,0.35,0.38,0.23,0.28,0.32),timepoint1 = c(0,6,24,48,48)),row.names = c(3L,7L,11L,15L,19L,23L,27L,31L),class = "data.frame")


ggplot(fat,aes(timepoint1,mean1,colour = study_group)) +
  geom_point(size=2) + 
  geom_line(size=1.2) +
  geom_errorbar(aes(ymin=mean1-se1,ymax=mean1+se1),width=1,size=1) + 
  scale_x_continuous(
    breaks = c(0,36,48),labels = c("Baseline","6 months","24 months","36 months","48 months"),expand = c(0.05,0))

enter image description here

解决方法

可能最好的办法是将月数编码为 numeric 向量而不是因子/字符。然后,您可以设置中断并重新标记 x 轴。两侧的空白由比例的 expand 参数控制。下面是带有虚拟数据的示例:

library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 4.0.3

df <- data.frame(
  x = rep(c(0,6,24,48),2),# <- encode as numeric
  ymin = c(1,2,3,4,1,5,7),y = c(2,8),ymax = c(3,7,8,9),group = rep(c("A","B"),each = 4)
)

ggplot(df,aes(x,y,colour = group)) +
  geom_line() +
  geom_errorbar(aes(ymin = ymin,ymax = ymax)) +
  # Details for the x-axis
  scale_x_continuous(
    breaks = c(0,36,labels = c("Baseline","6 months","24 months","36 months","48 months"),expand = c(0.02,0)
  )

作为对 SO 提出问题的建议,尝试包含一些相关(虚拟)数据并省略与手头问题无关的代码(例如主题设置、y 比例、装饰等)。这样可以更轻松地找到问题的核心,而不会被额外的代码分散注意力,也不必生成虚拟数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?