使用“聚合”功能绘制线图

时间:2018-07-29 15:58:11

标签: r aggregate line-plot

我正在尝试为两组数据(处理与控制)绘制带有误差线的折线图。总共有20个时期,10个试用期(TP)和10个正式时期(P),我想展示一下该组的含义是如何随时间变化的。为简单起见,以下数据帧包括3个试用期(TP1,TP5,TP10)和3个正式时期(P1,P5,P10)。

下面是我的代码。我的问题是,“合计”功能通过将其作为字符串来更改周期的顺序,这弄乱了时间趋势—我希望按TP1-> TP5-> TP10-> P1-> P5->的顺序进行排序P10

我想这不太棘手,但是我只是被卡住了。如果有人可以告诉我如何解决此问题,我将不胜感激。

此外:由于总共有20个周期,因此绘制误差带(或CI带)似乎比绘制许多误差线看起来更好。有办法吗?

df <- data.frame(Condition=c(rep("Treatment", 10), rep("Control", 10)), 
               TP1=rnorm(20, 1, 1), TP5=rnorm(20, 5, 1), TP10=rnorm(20, 10, 1), 
               P1=rnorm(20, 1, 1), P5=rnorm(20, 5, 1), P10=rnorm(20, 10, 1))

temp <- tidyr::gather(df, Period, x, -Condition)

m <- aggregate(x~Period + Condition, temp, mean)

st.err <- function(x) sqrt(var(x)/length(x))

se <- aggregate(x~Period + Condition, temp, st.err)

ci.data <- cbind(m, se[, 3])

colnames(ci.data) <-  c("Period", "Condition", "Mean", "SE")

library(ggplot2)
ggplot(data=ci.data, aes(x=Period, y=Mean, group=Condition, color=Condition)) + 
  geom_line() + 
  geom_point() +  
  geom_errorbar(aes(ymin=Mean-SE, ymax=Mean + SE), 
                width=.1, position=position_dodge(0.05)) 

1 个答案:

答案 0 :(得分:0)

使用reshape2::melt()将句点转换为更好排序的因子。由于geom_smooth()正在执行您想要的操作,因此这里不需要进行更多的聚合。

df.long <- reshape2::melt(df, "Condition", variable.name="Period", value.name = "x")

library(ggplot2)
ggplot(df.long, aes(x=Period, y=x, group=Condition, color=Condition, fill=Condition)) + 
  geom_smooth(method="loess", level=0.95, alpha=.2) 

屈服

enter image description here

数据

set.seed(42)  # for sake of reproducibility
df <- data.frame(Condition=c(rep("Treatment", 10), rep("Control", 10)), 
               TP1=rnorm(20, 1, 1), TP5=rnorm(20, 5, 1), TP10=rnorm(20, 10, 1), 
               P1=rnorm(20, 1, 1), P5=rnorm(20, 5, 1), P10=rnorm(20, 10, 1))

编辑

对于更大的数据集,您可以使用span调整平滑度。导出图例如与png()到您的working directory

png("test.png", width=1080, height=720, res=100)
ggplot(df.long, aes(x=Period, y=x, group=Condition, color=Condition, fill=Condition)) + 
  geom_smooth(method="loess", level=0.95, alpha=.2, span=.2) +
  labs(title="My Plot")
dev.off()

屈服

enter image description here