在 ggplot2 中创建一个显示平均值的分组条形图(我不想手动输入)
Creating a grouped barplot in ggplot2 showing mean values (that I do not want to enter manually)
我正在尝试创建一个分组条形图,显示我输入的数据的平均值,同时我想让它易于重现,以便我可以交换其他数据集类似地排列。我不想手动计算平均值并将其输入数据框中 - 有没有办法做到这一点?
我的数据由 100 - 2000 之间的数值组成,分为 3 个不同的药物治疗组,然后再分为 3 组(根据它们在生物体中的解剖位置,称为 "Inner"、"Middle", "Outer").最终图应该是 3 组 3 个条(每个代表 3 个位置中每个位置的细胞存活平均值)。到目前为止,我已经设法制作了单独的条形图,但我想将它们组合起来。
这是我的一些代码,下面是数据集的一小段摘录:
ggplot(Survival, aes(Treatment, Inner)) +
stat_summary(fun.y = mean,
geom = "bar",
position = "dodge")
Treatment Inner Middle Outer
RAD 317 373 354
RAD 323 217 174
RAD 236 255 261
HUTS 1411 1844 1978
HUTS 1922 1756 1856
HUTS 1478 1711 1433
RGD 1433 1489 1633
RGD 1400 1500 1544
RGD 1222 1333 1444
这里有两个选项:一个使用 dplyr
中的 group_by
和 summarise
来计算均值,然后通过管道输入 ggplot
来制作闪避条。第二个像您的示例代码一样使用 stat_summary
。两者都需要 gather
将您的数据转换为长格式。
library(tidyverse)
df %>%
gather(key = group, value = value, -Treatment) %>%
group_by(Treatment, group) %>%
summarise(mean_val = mean(value, na.rm = T)) %>%
ggplot(aes(x = Treatment, y = mean_val, fill = group)) +
geom_col(position = position_dodge())
df %>%
gather(key = group, value = value, -Treatment) %>%
ggplot(aes(x = Treatment, y = value, fill = group)) +
stat_summary(fun.y = mean, geom = "col", position = position_dodge())
我正在尝试创建一个分组条形图,显示我输入的数据的平均值,同时我想让它易于重现,以便我可以交换其他数据集类似地排列。我不想手动计算平均值并将其输入数据框中 - 有没有办法做到这一点?
我的数据由 100 - 2000 之间的数值组成,分为 3 个不同的药物治疗组,然后再分为 3 组(根据它们在生物体中的解剖位置,称为 "Inner"、"Middle", "Outer").最终图应该是 3 组 3 个条(每个代表 3 个位置中每个位置的细胞存活平均值)。到目前为止,我已经设法制作了单独的条形图,但我想将它们组合起来。
这是我的一些代码,下面是数据集的一小段摘录:
ggplot(Survival, aes(Treatment, Inner)) +
stat_summary(fun.y = mean,
geom = "bar",
position = "dodge")
Treatment Inner Middle Outer
RAD 317 373 354
RAD 323 217 174
RAD 236 255 261
HUTS 1411 1844 1978
HUTS 1922 1756 1856
HUTS 1478 1711 1433
RGD 1433 1489 1633
RGD 1400 1500 1544
RGD 1222 1333 1444
这里有两个选项:一个使用 dplyr
中的 group_by
和 summarise
来计算均值,然后通过管道输入 ggplot
来制作闪避条。第二个像您的示例代码一样使用 stat_summary
。两者都需要 gather
将您的数据转换为长格式。
library(tidyverse)
df %>%
gather(key = group, value = value, -Treatment) %>%
group_by(Treatment, group) %>%
summarise(mean_val = mean(value, na.rm = T)) %>%
ggplot(aes(x = Treatment, y = mean_val, fill = group)) +
geom_col(position = position_dodge())
df %>%
gather(key = group, value = value, -Treatment) %>%
ggplot(aes(x = Treatment, y = value, fill = group)) +
stat_summary(fun.y = mean, geom = "col", position = position_dodge())