【问题标题】:R: plot Q1, Q2, Q3 & mean by categoryR:按类别绘制 Q1、Q2、Q3 和平均值
【发布时间】:2022-10-25 08:01:26
【问题描述】:

我有一个庞大的数据集,并试图按类别绘制一种boxplot 与 Q1、Q2、Q3 统计数据。我想要一个带有标准四分位数范围框和勾勒中位数的粗线的箱线图可视化,但不是胡须和异常值。我还想按类别添加平均值。

因为我的数据量很大,所以计算所有这些数据然后将统计数据绘制为identity 会更容易。我找到了下面的代码,它计算统计数据然后绘制它们。但是,当我从代码中删除 yminymax 时,它不起作用。我想要一个类似的代码:(i)没有最大值和最小值,(ii)将平均值添加为一个点,(iii)按类别计算和绘制统计数据。

y <- rnorm(100)
df <- data.frame(
  x = 1,
  y0 = min(y),
  y25 = quantile(y, 0.25),
  y50 = median(y),
  y75 = quantile(y, 0.75),
  y100 = max(y)
)
ggplot(df, aes(x)) +
  geom_boxplot(
   aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
   stat = "identity"
 )

【问题讨论】:

    标签: r visualization boxplot quartile


    【解决方案1】:

    假设类别是 x 并且您计算了每个类别的统计数据(我在示例中模拟),您可以将 ymax 和 ymin 设置为 Q1 和 Q3 以隐藏它们:

    library(ggplot2)
    set.seed(1234)
    y1 <- rnorm(100)
    y2 <- rnorm(100)
    
    df <- data.frame(
      x = as.factor(1:2),
      y0 = c(min(y1),min(y2)),
      y25 = c(quantile(y1, 0.25),quantile(y2, 0.25)),
      y50 = c(quantile(y1, 0.5),quantile(y2, 0.5)),
      y75 = c(quantile(y1, 0.75),quantile(y2, 0.75)),
      y100 = c(max(y1),max(y2)),
      mean = c(mean(y1),mean(y2))
    )
    df$y100<-df$y75
    df$y0<-df$y25
    
    ggplot(df, aes(x)) +
      geom_boxplot(
       aes(group=x, ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
       stat = "identity"
     )  + geom_point(aes(group=x, y=mean))
    

    【讨论】:

    • 非常感谢!我怎样才能将平均值作为点添加到每个类别中?
    • 我使用 geom_point 将点添加到示例中,并将“平均”统计信息添加到 df.
    【解决方案2】:

    您可以使用 stat_summary 在绘图中添加平均值或其他统计数据。 例如,添加

    stat_summary(fun = "mean", colour = "red", size = 2, geom = "point").
    

    https://ggplot2.tidyverse.org/reference/stat_summary.html

    【讨论】:

    • 谢谢!但是,在这种情况下,平均值已经被计算为生成df 的代码中的另一个统计数据(见上文)。我只想绘制代表在构造df 时已经计算的类别平均值的列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2014-08-28
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多