R 中具有标准差的增长曲线
Growth curves in R with standard deviation
我正在尝试绘制我的数据(每个菌株的重复结果)并且我只需要每个菌株的一个折线图,这意味着每个菌株的平均重复结果以及带有误差线的点(误差在复制数据)。
如果你点击上面的图片,它会显示我目前的绘图,其中将 WT 和 WT.1 显示为单独的线和所有其他复制品。然而,它们是每个菌株(WT、DrsbR、DsigB)的复制品,我希望它们显示为每个菌株的一行平均结果。我正在使用 ggplot package- 和 melting data with reshape package,但无法弄清楚如何使我的复制品与误差线一起显示为一行(复制品之间平均结果的标准偏差)。
黑白图像是我在我的图表中寻找的东西 - 单独的线,将复制数据点绘制为平均值。
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)
一种方法是使用来自tidyr
。我没有你的数据集——如果你能通过 dput(your.data.frame)
分享你的数据集以备将来提问,我将不胜感激——所以我制作了一个类似于你的虚拟数据集。这里我们有两个 "species"(红色和蓝色)和每个物种两个 "strains"。
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()
将生成的 "variable" 列分成 "species" 列和 "strain" 列。幸运的是,您的数据包含一个“.”。这可以是一个方便的字符用于分离:
df.melt.mod <- df.melt %>%
separate(col=variable, into=c('species', 'strain'), sep='\.')
注意:上面的代码会给你一个与"blue"和"red"没有“.”这一点相关的警告。字符,从而为 "strain" 列提供 NA。我们在这里不关心,因为我们没有使用该列来做任何事情。在自己的数据集中,同样可以不用太在意。
然后,您实际上可以对所有 geom 使用 stat_summary()
...根据自己的视觉和主题偏好进行修改。请注意,顺序对于分层很重要,因此我先绘制 geom_line
,然后绘制 geom_point
,然后绘制 geom_errorbar
。另请注意,您可以在基础 ggplot()
调用中分配 group=species
美学,并且该映射适用于所有 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()
我正在尝试绘制我的数据(每个菌株的重复结果)并且我只需要每个菌株的一个折线图,这意味着每个菌株的平均重复结果以及带有误差线的点(误差在复制数据)。
如果你点击上面的图片,它会显示我目前的绘图,其中将 WT 和 WT.1 显示为单独的线和所有其他复制品。然而,它们是每个菌株(WT、DrsbR、DsigB)的复制品,我希望它们显示为每个菌株的一行平均结果。我正在使用 ggplot package- 和 melting data with reshape package,但无法弄清楚如何使我的复制品与误差线一起显示为一行(复制品之间平均结果的标准偏差)。 黑白图像是我在我的图表中寻找的东西 - 单独的线,将复制数据点绘制为平均值。
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)
一种方法是使用来自tidyr
。我没有你的数据集——如果你能通过 dput(your.data.frame)
分享你的数据集以备将来提问,我将不胜感激——所以我制作了一个类似于你的虚拟数据集。这里我们有两个 "species"(红色和蓝色)和每个物种两个 "strains"。
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()
将生成的 "variable" 列分成 "species" 列和 "strain" 列。幸运的是,您的数据包含一个“.”。这可以是一个方便的字符用于分离:
df.melt.mod <- df.melt %>%
separate(col=variable, into=c('species', 'strain'), sep='\.')
注意:上面的代码会给你一个与"blue"和"red"没有“.”这一点相关的警告。字符,从而为 "strain" 列提供 NA。我们在这里不关心,因为我们没有使用该列来做任何事情。在自己的数据集中,同样可以不用太在意。
然后,您实际上可以对所有 geom 使用 stat_summary()
...根据自己的视觉和主题偏好进行修改。请注意,顺序对于分层很重要,因此我先绘制 geom_line
,然后绘制 geom_point
,然后绘制 geom_errorbar
。另请注意,您可以在基础 ggplot()
调用中分配 group=species
美学,并且该映射适用于所有 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()