关于ggplot2:如何在R中制作可变宽度直方图,标签与bin边缘对齐? | 珊瑚贝

How to make variable width histogram in R with labels aligned to bin edges?


我正在使用 ggplot2,默认情况下会创建具有固定 bin 宽度的直方图,并且其 bin 标签绘制在每个 bin 的中心。

我想要的是一个可变宽度的直方图,它的 bin 标签代表每个 bin 的端点,如下图:

desired

为了生成这个示例图,我手动输入了 bin 参数并移动了 bin 以使其与端点对齐:

1
2
3
4
5
6
income=data.frame(lx=c(0,10,25,50,100),rx=c(10,25,50,100,150),y=c(20,28,27,18,7))
income$width = income$rx-income$lx

ggplot(income, aes(lx+width/2,y/width)) + geom_bar(aes(width=rx-lx), color=’black’, stat=’identity’) +
  scale_x_continuous(breaks=unique(c(income$lx,income$rx))) + labs(x=’Income (thousands of $)’, y=’% per thousand $’)

但我想根据原始数据自动执行此操作。 (原始数据可以使用以下代码进行近似):

1
2
3
incomes=unlist(sapply(1:nrow(income), function(i) sample(income$lx[i]:(income$rx[i]-1),income$y[i],replace=TRUE)))
widths=unlist(sapply(1:nrow(income), function(i) rep(income$rx[i]-income$lx[i],income$y[i])))
incomes=data.frame(incomes, widths)

  • 你说的是 10、25、50 等标签?但是当我在 R 中运行这段代码时,结果看起来和你想要的直方图一样吗?
  • 您能否详细说明您正在寻找什么样的解决方案?您给定的代码无需修改即可创建所需的效果。
  • 我想使用原始数据自动执行此操作(请参阅 \\’incomes\\’ 数据框)。我的示例是垃圾箱的手工编码表示。


您可以通过在 geom_histogram 中指定所需的 breaks 来生成可变宽度直方图。使用 y=..density..(而不是基于计数的默认值),以便将条形标准化为它们在条形总面积中的比例。

1
2
3
4
5
6
breaks = c(0,10,25,50,100,150)

ggplot(incomes, aes(incomes)) +
  geom_histogram(aes(y=..density..),
                 color=”black”, fill=”grey40″, breaks=breaks) +
  scale_x_continuous(breaks=breaks)

enter


来源:https://www.codenong.com/37766893/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9764.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?