How to make variable width histogram in R with labels aligned to bin edges?
我正在使用
我想要的是一个可变宽度的直方图,它的 bin 标签代表每个 bin 的端点,如下图:
为了生成这个示例图,我手动输入了 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) |
您可以通过在
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) |