R 仅当计数高于阈值时才打印直方图箱

R 仅当计数高于阈值时才打印直方图箱,r,histogram,R,Histogram,假设我有这样一个向量: mydata = c(1, 3, 4, 5, 6, 7, 8, 9, 10) h = hist(mydata, breaks=5) 五段柱状图如下所示: mydata = c(1, 3, 4, 5, 6, 7, 8, 9, 10) h = hist(mydata, breaks=5) 如何仅绘制频率计数高于阈值的箱子?在这种情况下,任何大于1的计数 最后,我想给出以下柱状图: 我知道我可以使用h$counts和h$breaks访问计数和中断,但我想不出一种简单

假设我有这样一个向量:

mydata = c(1, 3, 4, 5, 6, 7, 8, 9, 10)
h = hist(mydata, breaks=5)
五段柱状图如下所示:

mydata = c(1, 3, 4, 5, 6, 7, 8, 9, 10)
h = hist(mydata, breaks=5)

如何仅绘制频率计数高于阈值的箱子?在这种情况下,任何大于1的计数

最后,我想给出以下柱状图:


我知道我可以使用
h$counts
h$breaks
访问计数和中断,但我想不出一种简单的方法来使用它们过滤掉一些箱子。

您可以直接操作
hist
返回的对象并打印它:

h$counts[ h$counts < 2 ] <- 0
plot(h)

h$counts[h$counts<2]在这种特殊情况下,您可以这样做,但如果箱子相邻且位于直方图的左端,则无法概括

f <- -which(h$counts < 2)
h[1:4] <- lapply(h[1:4], "[", f)
h
# $breaks
# [1]  2  4  6  8 10
# 
# $counts
# [1] 2 2 2 2
# 
# $density
# [1] 0.1111111 0.1111111 0.1111111 0.1111111
# 
# $mids
# [1] 3 5 7 9
# 
# $xname
# [1] "mydata"
# 
# $equidist
# [1] TRUE
# 
# attr(,"class")
# [1] "histogram"

<代码> f> p>我假设如果低于阈值的桶在直方图的中间,你只想扔掉桶。 有鉴于此,需要将轴限制调整到第一个和最后一个非零桶

到目前为止,初步的直方图

mydata2 <- c(1, 3, 4, 5, 6, 7, 3, 9, 10, 12)

h2 <- hist(mydata2, breaks=6)

mydata2谢谢您的回答。有没有办法把垃圾桶全部移走?就目前情况而言,垃圾箱仍然存在,但条形图已被删除。我认为使用
hist()
函数不可能做到这一点,因为您无法获得分解的x刻度(当您希望删除的一个垃圾箱位于其他垃圾箱之间时)。您必须自己绘制,例如使用
plot
rect
或ggplot2。看一看
图形:::plot.histogram
以获得灵感。谢谢,我会查看它们的。但是当所有被丢弃的垃圾箱都位于x轴的边缘时呢?那么,x标度就不会被打破。我要提醒的是,这可能是对数据的误导性操纵。这是一个多模态的问题吗?类似的问题可能是,如何确定最佳的存储箱宽度,以便稀疏的存储箱很少被填充。或者你可以看到密度平滑的不同窗口。@AdamO,问题(我不认为)是关于多模态的。我有一些噪声数据(一些值太小)仍然绘制在直方图中(一些箱子的计数为1,而其他箱子的计数为3或4个数量级。仅添加噪声不会导致此“问题”。这是直方图的一个已知限制:如果你选择太多的箱子,就会有间歇性的稀疏箱子。解决方案:较少的箱子或密度平滑。不应排除尾部的稀疏箱子,它们包含有关分布的关键信息,如偏斜度和范围。谢谢@AdamO,我没有考虑尾部的稀疏箱子如何添加信息关于偏度和范围的信息。我会保留它们。