【问题标题】:How to add mean value line to plot of a factor?如何将平均值线添加到因子图?
【发布时间】:2017-05-19 19:44:07
【问题描述】:

我的文档和 plot() 的返回值有问题。我想在图中添加一条带有平均值的水平线,但我无法计算它。我希望能够利用情节的价值,但我失败了。例如:

> x<-sample(5, 10, replace=TRUE)
> x
 [1] 3 5 1 4 5 4 2 4 1 5
> y<-plot(factor(x))
> y
     [,1]
[1,]  0.7
[2,]  1.9
[3,]  3.1
[4,]  4.3
[5,]  5.5

显然域和范围都是整数,那么 plot 返回的这些数字的真正含义是什么,我怎样才能得到平均条形高度?

当然(如果没有更优雅的解决方案)我可以遍历因子级别,计算每个级别的项目数,然后取它们的平均值。另外,如果你使用hist()而不是plot(),那么解决方法很简单:abline(h=mean(hist(x)$counts))

【问题讨论】:

  • @Marco Sandri:你试过了吗?我觉得这是错误的。我不想要x 的平均值,而是平均条形高度。
  • 此命令在平均条形高度处绘制一条水平线abline(h=length(x)/length(y))
  • @Marco Sandi:所以平均值不取决于x 的值,而仅取决于柱的数量?你能解释一下背后的数学原理吗?我还认为建议的解决方案应该在“答案”部分提出......
  • 在过去的评论中,您写道您希望在“平均条形高度”处有一行。我的解决方案正是您所要求的。

标签: r bar-chart mean


【解决方案1】:

要添加水平线,只需说:

    abline(h = mean(x))

abline(h = 不管) 给你一条水平线。 abline(y = whatever) 给你一条垂直线。

【讨论】:

  • 您错过了条形高度不是x 的值,而是x 特定值的出现次数,这意味着我没有绘制x,但是factor(x).
  • 鉴于给定示例中mean(x) 等于3.4,很明显它不可能是平均条形高度,因为所有条形都低于该值。
【解决方案2】:

我自己发明的(最?)复杂的解决方案可能是这样的:

abline(h=mean(unlist(lapply(min(x):max(x), function(ff) length(which(x == ff))))))

当然,这个解决方案只有在x 是一个因素并且级别是数字的情况下才有效;否则将min(x):max(x) 替换为levels(x)

而且(对我来说更难理解)一个更简单的解决方案似乎是(来自@Marco Sandri):

abline(h=length(x)/length(y))

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 2016-11-30
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多