首页 > 解决方案 > 将频率为零的类别强制到条形图

问题描述

我有一个观察向量,我希望在 R 中绘制一个条形图。

该向量包含从 0 到 9 的离散值。没有观察到 6,但是当我绘制它时,我希望 6 出现在 x 轴上,上面没有条形。我在任何地方都找不到在线指导如何做到这一点。

到目前为止,我的代码是:

sick = c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,7,7,7,7,7,8,8,9)
ft = data.frame(table(sick))
colnames(ft) = c('Value','Freq')
ft$Perc = round(ft$Freq / sum(ft$Freq) * 100,1)
counts = table(sick)
bp = barplot(counts, main="Sick Leave Distribution", ylab = "Frequency", xlab = "Days of Sick Leave Taken" , ylim = c(0,10), cex.names = 1, col = "blue", names.arg=gsub("\\s","\n", unique(sick)))
text(x=bp, y=counts, labels=round(counts,0), pos=3, xpd=NA)

代码工作正常,但我希望将 6 的值添加到 x 轴。如何在 R 中完成?

标签: rbar-chart

解决方案


为表函数提供一个因子可以解决此问题。而且你还需要调整name.arg

sick = c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,7,7,7,7,7,8,8,9)
ft = data.frame(table(sick))
colnames(ft) = c('Value','Freq')
ft$Perc = round(ft$Freq / sum(ft$Freq) * 100,1)
counts = table(factor(sick,levels = c(0:9)))
bp = barplot(counts, main="Sick Leave Distribution", ylab = "Frequency", xlab = "Days of Sick Leave Taken" , ylim = c(0,10), cex.names = 1, col = "blue", names.arg=gsub("\\s","\n", c(0:9)))
text(x=bp, y=counts, labels=round(counts,0), pos=3, xpd=NA)

推荐阅读