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 比例、装饰等)。这样可以更轻松地找到问题的核心,而不会被额外的代码分散注意力,也不必生成虚拟数据。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...