【问题标题】:Adding a line at the mean of the data, ggplot2 [closed]在数据的平均值处添加一条线,ggplot2 [关闭]
【发布时间】:2018-12-27 17:11:44
【问题描述】:

我正在尝试添加一条简单的线以在 ggplot2 条形图中显示我的数据的中位数和平均值。

这是我的代码

library(ggplot2)
library(plyr)

data <- c(1,1,1,2,2,2,2,2,2,3,3,4,5)

count_data<- count(data)

mean <- mean(count_data)
med <- median(count_data)
ggplot(count_data) + 
  geom_bar(aes(x=x, y=freq), stat="identity", position="dodge") +
  geom_vline(aes(xintercept=mean)) + 
  #facet_wrap(~Year, nrow=1) + 
  theme_classic()

我确实可以看到我的数据,但 vline 没有显示。你知道有什么问题吗?

【问题讨论】:

  • 你在第 2 行使用了哪个包的 count 函数 - plyr
  • 是的。在代码中添加了@JonSpring
  • 您的意思是mean &lt;- mean(data); med &lt;- median(data)?当我在 count_data 上运行时出现错误。
  • 该死,我很傻,这确实是问题所在。感谢您解决这个问题:)

标签: r ggplot2 bar-chart vline


【解决方案1】:

我假设你想要平均/中值频率,因为你已经创建了count_data。为此,我在创建meanmed 时明确调用了freq 变量。因此,下面的条形图上有两条线。

如果你真的想要data 的平均值/中值,那么它应该只是mean(data),例如。

data <- c(1,1,1,2,2,2,2,2,2,3,3,4,5)

count_data<- plyr::count(data)

mean <- mean(count_data$freq)
med <- median(count_data$freq)
ggplot(count_data) + 
  geom_bar(aes(x=x, y=freq), stat="identity", position="dodge") +
  geom_vline(aes(xintercept = mean)) + 
  geom_vline(aes(xintercept = med)) +
  #facet_wrap(~Year, nrow=1) + 
  theme_classic()

【讨论】:

  • 很好的解决方案。您不需要先计算均值和中位数,您可以直接在代码中执行此操作,效果相同:p + geom_vline(xintercept = mean(freq))
猜你喜欢
  • 2011-05-13
  • 2018-11-25
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多