在R中绘制多个分组均值

时间:2018-12-20 19:27:31

标签: r ggplot2

我的数据如下所示。我需要为csv文件中的lineplot/barplotval之类的每个组平均创建status的{​​{1}}。
category格式的数据。

dput

我尝试了以下代码,但无法弄清整个问题。

df <-
structure(list(val = c(4608, 4137, 6507, 5124, 
3608, 34377, 5507, 5624, 4608, 4137, 6507, 5124, 
3608, 3437, 5507, 5507, 5624), status = c("1x", 
"1x", "1x", "2x", "2x", "2x", "2x", "2x", "50xy", 
"50xy", "50xy", "60xy", "60xy", "70xy", "xyz", 
"xyz", "xyz"), category = c("A", "C", "A", "A", 
"A", "B", "B", "C", "B", "C", "A", "B", "C", 
"B", "B", "C", "C")), row.names = c(NA, 
-17L), class = "data.frame")

在单个窗口中帮助绘制它们(每组明智,例如为每个library(ggplot2) ggplot(df, aes(x = status, y = val, group = category, color = source)) + geom_smooth(method = "loess") val绘制均值2x)将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

library(dplyr)
library(ggplot2)
df %>%
    group_by(category, status) %>%
    mutate(agg = mean(val)) %>%
    ggplot(., aes(status, agg, fill = category, color=status))+
    geom_col(position = "dodge")

答案 1 :(得分:1)

此问题已经有一个accepted answer,需要计算汇总 mean(val)的{​​{1}},status事先

但是,category包含 transformations (或 stats ),使我们能够在不使用其他程序包的情况下一次性创建所需的情节:

ggplot2

这将创建平均值as requested by the OP的折线图:

enter image description here

或者,我们可以告诉library(ggplot2) ggplot(df, aes(x = status, y = val, group = category, colour = category)) + stat_summary(geom = "line", fun.y = "mean") 使用摘要统计信息:

geom_line

将创建相同的图。

ggplot(df, aes(status, val, group = category, colour = category)) + geom_line(stat = "summary", fun.y = "mean") 也可以用于显示原始数据和汇总统计信息,并汇总在一个图中:

stat_summary()

enter image description here

这可以帮助更好地了解基础数据的结构,例如离群值。请注意不同的y比例尺。