在R中的直方图上绘制条形图

安妮洛威尔

我试图用堆积的条形图叠加直方图,但是条形图始终从右移,因为它从零开始绘制。请参阅以下示例,以了解我要执行的操作(如果不使用ggplot,则应该添加)。

set.seed(1)

dat <- rnorm(1000, sd = 10)
h <- hist(dat)
cnt <- h$counts
breaks <- h$breaks

mat <- matrix(NA, nrow = 3, ncol = length(cnt))
for(i in 1:length(cnt)){
  sample <- sample(1:3, size = cnt[i], replace = TRUE)
  for(j in 1:3){
    mat[j, i] <- sum(sample == j)
  }
}

barplot(mat, add = TRUE, width = unique(diff(breaks)), space = 0, 
        col = c("blue", "green", "orange"))

此代码的输出如下:

在此处输入图片说明

我尝试在指定位置的矩阵垫中使用列名,但无济于事。在要创建直方图的绘图中,将完全覆盖绘图,因为它应与小节完全位于同一位置。首先将其绘制的原因是我希望直方图可以给我轴。非常感谢任何有关如何执行此操作的想法。

杰伊

您可以将barplot控制台输出的中间小节和的中断点结合起来hist以创建axis刻度线。从条形中点减去条形图宽度的一半。使用mtext可以更好地控制轴标签。

h <- hist(dat, plot=FALSE)
# [...]

.width <- unique(diff(breaks))
b <- barplot(mat, width=.width, space=0, 
        col=c("blue", "green", "orange"))
axis(1, b-.width/2, labels=FALSE)
mtext(h$breaks[-length(h$breaks)], 1, 1, at=b-.width/2)

在此处输入图片说明

编辑

.width <- unique(diff(breaks))
b <- barplot(mat, width=.width, space=0, 
             col=c("blue", "green", "orange"))
ats <- seq(0, par()$usr[2], 5)
mod <- (ats + 5) %% 20 == 0
labs <- h$breaks
axis(1, ats[mod], labels=FALSE)
mtext(labs[mod], 1, 1, at=ats[mod])

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档