gpt4 book ai didi

r - 为每个方面添加带有人口中位数的 hline

转载 作者:行者123 更新时间:2023-12-04 02:58:21 27 4
gpt4 key购买 nike

我想用该方面的人口中位数绘制一条水平方面的线。

我尝试了这种方法,但没有使用以下代码创建虚拟汇总表:

require(ggplot2)

dt = data.frame(gr = rep(1:2, each = 500),
id = rep(1:5, 2, each = 100),
y = c(rnorm(500, mean = 0, sd = 1), rnorm(500, mean = 1, sd = 2)))


ggplot(dt, aes(x = as.factor(id), y = y)) +
geom_boxplot() +
facet_wrap(~ gr) +
geom_hline(aes(yintercept = median(y), group = gr), colour = 'red')

但是,这条线是针对整个数据集的中位数绘制的,而不是为每个方面单独绘制中位数:
enter image description here

过去,一个 solution已建议使用
  geom_line(stat = "hline", yintercept = "median")

但它已停止使用(产生错误“No stat called StatHline”)。

另一个 solution建议
 geom_errorbar(aes(ymax=..y.., ymin=..y.., y = mean))

但它会产生
Error in data.frame(y = function (x, ...)  : 
arguments imply differing number of rows: 0, 1000

最后,有一种方法可以通过创建 dummy table 来绘制中位数。具有所需的统计数据,但我想避免它。

最佳答案

如果不想添加具有计算中值的新列,可以添加 geom_smooth使用分位数回归:

library(ggplot2)
library(quantreg)

set.seed(1234)

dt <- data.frame(gr = rep(1:2, each = 500),
id = rep(1:5, 2, each = 100),
y = c(rnorm(500, mean = 0, sd = 1),
rnorm(500, mean = 1, sd = 2)))

ggplot(dt, aes(y = y)) +
geom_boxplot(aes(x = as.factor(id))) +
geom_smooth(aes(x = id), method = "rq", formula = y ~ 1, se = FALSE) +
facet_wrap(~ gr)

boxplot and median

关于r - 为每个方面添加带有人口中位数的 hline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com