我正在尝试绘制数据(每个菌株的重复结果),并且我只希望每个菌株有一个折线图,这意味着每个菌株的平均重复结果带有沿误差线的点(重复数据之间的误差) 。
如果单击上面的图像,则显示了我到目前为止的绘图,该绘图将WT和WT.1显示为单独的行,并显示所有其他重复项。但是,它们是每种菌株(WT,DrsbR,DsigB)的复制品,我希望它们显示为每种菌株的平均结果的一行。我使用的是ggplot打包数据,并且将数据与reshape打包数据融合在一起,但是无法弄清楚如何使我的重复数据与误差线(重复数据之间的均值的标准差)一起显示为一行。黑白图像是我在图形分开的行中寻找的东西,复制数据的点绘制为平均值。
library(reshape2)
melted<-melt(abs2)
print(abs2)
melted<-melt(abs2,id=1,measured=c("WT","WT.1","DsigB","DsigB.1","DrsbR","DrsbR.1"))
View(melted)
colnames(melted)<-c("Time","Strain","Values")
##line graph for melted data
melted$Time<-as.factor(melted$Time)
abs2line=ggplot(melted,aes(Time,Values))+geom_line(aes(colour=Strain,group=Strain))
abs2line+
stat_summary(fun=mean,
geom="point",
aes(group=Time))+
stat_summary(fun.data=mean_cl_boot,
geom="errorbar",
width=.2)+
xlab("Time")+
ylab("OD600")+
theme_classic()+
labs(title="Growth Curve of Mutant Strains")
summary(melted)
print(melted)
一种方法是使用separate
中的separate()
函数将融化的数据框和tidyr
从“变量”列中移到“种类”和“应变”中。我没有您的数据集-如果您能够通过dput(your.data.frame)
共享您的数据集以解决以后的问题,我们将不胜感激-因此,我制作了一个与您的数据集相似的虚拟数据集。在这里,每个物种都有两个“物种”(红色和蓝色)和两个“菌株”。
df <- data.frame(
time = seq(0, 40, by=10),
blue = c(0:4),
blue.1 = c(0, 1.1, 1.9, 3.1, 4.1),
red = seq(0, 8, by=2),
red.1 = c(0, 2.1, 4.2, 5.5, 8.2)
)
df.melt <- melt(df,
id.vars = 'time',
measure.vars = c('blue', 'blue.1', 'red', 'red.1'))
然后我们可以使用tidyr::separate()
将所得的“变量”列分为“种类”列和“应变”列。幸运的是,您的数据包含一个“。”可以用作分隔的方便字符:
df.melt.mod <- df.melt %>%
separate(col=variable, into=c('species', 'strain'), sep='\\.')
注意:上面的代码将向您发出警告,指出“蓝色”和“红色”没有“。”。字符,从而为“应变”列提供NA。我们不在这里,因为这里没有使用该列。同样,在您自己的数据集中,您不必太在意。
然后,您实际上可以只对所有几何图形使用stat_summary()
...根据您的视觉和主题偏好进行修改。请注意,顺序对于分层很重要,因此我先绘制geom_line
,然后绘制geom_point
,然后绘制geom_errorbar
。还请注意,您可以在基本group=species
调用中分配ggplot()
美观度,并且除非覆盖,否则映射将应用于所有geoms
。
ggplot(df.melt.mod, aes(x=time, y=value, group=species)) +
stat_summary(
fun = mean,
geom='line',
aes(color=species)) +
stat_summary(
fun=mean,
geom='point') +
stat_summary(
fun.data=mean_cl_boot,
geom='errorbar',
width=0.5) +
theme_bw()