【问题标题】:abline() is not working with weighted.hist()abline() 不适用于 weighted.hist()
【发布时间】:2021-07-12 02:44:32
【问题描述】:

所以我使用plotrix 库使用一些权重绘制直方图,直方图按预期显示,但是当我尝试绘制平均值作为垂直线时,它根本不会显示
这是我的代码的 sn-p:

library("plotrix")
library("zoom")


vals = seq.int(from = 52.5 , to = 97.5 , by = 5)
weights <- c(18.01,18.26,16.42,14.07,11.67,9.19,6.46,3.85,1.71,0.34)/100

mean <- sum(vals*weights)
wh <- weighted.hist(x = vals , w = weights , freq = FALSE)
abline(v = mean)

abline() 似乎只适用于普通的hist() 函数

如果这个问题听起来很愚蠢,我很抱歉,我是 R 新手,但是我做了研究,找不到任何有用的信息。

提前致谢。

【问题讨论】:

标签: r r-environment


【解决方案1】:

您应该提供数据样本。只有当您的权重总和为 1 时,您对加权平均值的计算才是正确的。如果不是,您应该使用 weighted.mean(vals, weights)sum(vals * weights/sum(weights))。以下示例根据weighted.hist 手册页 (help(weighted.hist)) 上的示例稍作修改:

vals <- sample(1:10, 300, TRUE)
weights <- (101:400)/100
weighted.hist(vals, weights, breaks=1:10, main="Test weighted histogram")
(mean <- weighted.mean(vals, weights))
# [1] 5.246374

直方图从 1 开始,但在 x 轴坐标上是 0,因此我们需要减去 1 才能使直线位于正确的位置:

abline(v=mean-1, col="red")

使用您的数据,我们需要确定第一个边界以调整平均值,使其绘制在正确的位置"

wh$breaks[1]
# [1] 52.5
abline(v=mean - wh$breaks[1], col="red")

【讨论】:

  • 我的权重总和为 0.9998 但这没什么大不了的,因为它是如此接近 1 ,这将如何影响打印垂直线?顺便说一句,为什么您创建 299 权重而不是 300? (400-101 = 299) 因为你的样本量 = 300
  • 正如我上面提到的,我确信问题与数据集本身无关,而是 weighted.hist() 因为我尝试使用测试数据集 hist() 并且我可以绘制垂直行就好了
  • length(101:400) 是 300,就像 1:10 是 10 个值,而不是 9。由于您没有提供数据,因此无法说明为什么您没有得到一条线。由于轴坐标从 0 开始,但您的第一个直方图条可能从大于该数字的数字开始,它可能绘制在图形之外。
  • 好的,我会提供数据集
  • 没有。程序员设置绘图窗口的坐标。通常它们确实与数据的范围相匹配,例如histplot 函数。您可以随时使用par("usr") 检索它们。对于返回 -1.8000000 46.8000000 0.0000000 0.3990498 的数据,因此垂直轴位于水平轴上的 -1.8 处,第一个条形图从 0 开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多