在ggplot2中,我使用stat_summary()
函数计算和绘制数据集的均值和标准差。我同时使用facet_wrap()
将数据集分解成两个图。令我惊喜的是,将facet_wrap()
添加到我的ggplot中会使stat_summary()
被正确地独立地应用于数据的每个子集。
df>
| ID | Group | Strain | Condition | DoublingTime |
|-----------|-------|--------|-----------|-----------------|
| A_3g_Rep1 | A_3g | A | 3g | 122.4135 |
| A_3g_Rep2 | A_3g | A | 3g | 124.5801 |
| A_3g_Rep3 | A_3g | A | 3g | 124.9419 |
| A_6g_Rep1 | A_6g | A | 6g | 120.5004 |
| A_6g_Rep2 | A_6g | A | 6g | 124.1666 |
| A_6g_Rep3 | A_6g | A | 6g | 124.6453 |
| B_3g_Rep1 | B_3g | B | 3g | 132.568 |
| B_3g_Rep2 | B_3g | B | 3g | 137.5242 |
| B_3g_Rep3 | B_3g | B | 3g | 135.5238 |
| B_6g_Rep1 | B_6g | B | 6g | 137.1333 |
| B_6g_Rep2 | B_6g | B | 6g | 142.733 |
| B_6g_Rep3 | B_6g | B | 6g | 140.0722 |
首先,我使用以下方法正确计算平均值和标准差值。然而,它包括x轴上的组不存在于面中。
DT_plotA <- ggplot(df, aes(Group, DoublingTime)) +
stat_summary(fun.data="mean_sdl", fun.args = list(mult=1),
geom="errorbar", width=0.5) +
stat_summary(fun=mean, geom="point", size=3) +
facet_wrap(nrow = 1, .~Strain)
令我惊喜的是,在包含facet_wrap()的同时将aes() x值调整为条件会导致stat_summary()正确计算每个组的均值和标准差。
DT_plotB <- ggplot(df, aes(Condition, DoublingTime)) +
stat_summary(fun.data="mean_sdl", fun.args = list(mult=1),
geom="errorbar", width=0.5) +
stat_summary(fun=mean, geom="point", size=3) +
facet_wrap(nrow = 1, .~Strain)
然而,如果将facet_wrap从图中删除,stat_summary将根据条件计算平均值和标准差:来自独立菌株的数据被平均化。我担心这一警告会被遗忘,并导致删除方面时平均/sd的不正确计算。
DT_plotC <- ggplot(df, aes(Condition, DoublingTime)) +
stat_summary(fun.data="mean_sdl", fun.args = list(mult=1),
geom="errorbar", width=0.5) +
stat_summary(fun=mean, geom="point", size=3)
问题
是否有一种方法可以生成一个看起来类似DT_plotB但包含aes(Group,DoublingTime)的绘图,如DT_plotA代码中所示?
发布于 2022-11-08 12:17:05
也许我们可以对数据进行预处理,->计算平均值和sd:
library(dplyr)
library(ggplot2)
df %>%
group_by(Strain, Condition) %>%
mutate(mean = mean(DoublingTime),
sd = sd(DoublingTime)) %>%
ggplot(aes(x = Condition, y=mean)) +
geom_point()+
geom_errorbar(aes(ymin = mean-sd, ymax = mean+sd), width=.2)+
facet_wrap(.~Strain)
https://stackoverflow.com/questions/74366545
复制相似问题