繁体   English   中英

仅当计数高于阈值时才绘制直方图箱

[英]Plot histogram bins only if count is above a threshold

假设我有一个像这样的向量:

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

五中断直方图如下所示:

h = hist(mydata, breaks=5)

在此处输入图片说明

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

我想得出以下直方图:

在此处输入图片说明

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

在这种特殊情况下,您可以像这样进行操作,但不能将其推广到连续的垃圾箱和直方图的左端。

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"

如果您要涵盖bin两端的情况,则必须增加一些代码复杂性。

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

f1 <- h$counts < 2
f2 <- rle(f1)
if (length(f2$lengths) == 3) {
    f2$lengths[2] <- f2$lengths[2] + 1
    f2 <- which(inverse.rle(f2))
} else {
    f2 <- which(f1)
}

h[2:4] <- lapply(h[2:4], "[", !f1)
h[[1]] <- h[[1]][-f2]

plot(h)

在此处输入图片说明

在此处输入图片说明

我假设如果低于阈值的存储桶位于直方图的中间,则只想删除该存储桶即可。

鉴于此,只需将轴限制调整为第一个和最后一个非零桶即可。

到目前为止,初始直方图

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

h2 <- hist(mydata2, breaks=6)

之前

它会像这样变

h2$counts[ h2$counts < 2] <- 0
xmin <- h2$breaks[min(which(h2$counts != 0))] 
xmax <- h2$breaks[max(which(h2$counts != 0)) + 1] 
plot(h2, xlim = c(xmin, xmax))

后

如果要将中间存储桶合并到其他频率,则变得更加复杂,并取决于要使用的合并规则。

您可以直接操纵hist返回的对象并将其绘制:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM