gpt4 book ai didi

r - 使用 geom_bar 和 stat ="identity"在均值处绘制 hline

转载 作者:行者123 更新时间:2023-12-03 23:15:11 25 4
gpt4 key购买 nike

我有一个条形图,其中确切的条形高度在数据框中。

df <- data.frame(x=LETTERS[1:6], y=c(1:6, 1:6 + 1), g=rep(x = c("a", "b"), each=6))

ggplot(df, aes(x=x, y=y, fill=g, group=g)) +
geom_bar(stat="identity", position="dodge")

enter image description here

现在我想添加 两个 hlines 显示每组所有条的平均值。我得到的一切
ggplot(df, aes(x=x, y=y, fill=g, group=g)) + 
geom_bar(stat="identity", position="dodge") +
stat_summary(fun.y=mean, aes(yintercept=..y.., group=g), geom="hline")



enter image description here

由于我也想为任意数量的组执行此操作,因此我希望仅使用 ggplot 的解决方案。

我想避免这样的解决方案,因为它不完全依赖于传递给 ggplot 的数据集,具有冗余代码并且在组数方面不灵活:
ggplot(df, aes(x=x, y=y, fill=g, group=g)) + 
geom_bar(stat="identity", position="dodge") +
geom_hline(yintercept=mean(df$y[df$g=="a"]), col="red") +
geom_hline(yintercept=mean(df$y[df$g=="b"]), col="green")

提前致谢!

编辑:
  • 添加数据集
  • 对结果代码的评论
  • 更改数据和绘图以澄清问题
  • 最佳答案

    如果我正确理解你的问题,你的第一种方法几乎就在那里:

    ggplot(df, aes(x = x, y = y, fill = g, group = g)) + 
    geom_col(position="dodge") + # geom_col is equivalent to geom_bar(stat = "identity")
    stat_summary(fun.y = mean, aes(x = 1, yintercept = ..y.., group = g), geom = "hline")

    plot

    根据 stat_summary 的帮助文件:

    stat_summary operates on unique x; ...



    在这种情况下, stat_summary继承了 x = x的顶级美学映射和 group = g默认情况下,它会计算平均 y 值 在每个 x 对于 g 的每个值,导致很多水平线。添加 x = 1stat_summary的映射覆盖 x = x (同时保留 group = g ),所以我们为每个 g 值得到一个单一的平均 y 值。

    关于r - 使用 geom_bar 和 stat ="identity"在均值处绘制 hline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52330348/

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