如何使用R中的数据值或百分比标记直方图条

时间:2012-02-16 19:40:48

标签: r graphics histogram

我想用直方图中的每个条形标记该区域中的计数数量或该区域中的总计数百分比。我敢肯定必须有办法做到这一点,但我找不到它。这个页面有几张SAS直方图的照片,基本上就是我要做的事情(但该网站似乎没有R版本):http://www.ats.ucla.edu/stat/sas/faq/histogram_anno.htm

如果可能的话,根据需要,可以灵活地将标签放在条形图的上方或某处。

我正在尝试使用基础R绘图工具,但我对ggplot2和格子中的方法感兴趣。

2 个答案:

答案 0 :(得分:35)

要包含计数数量,您只需设置labels=TRUE即可。

下面的示例只是略微改编自hist()帮助页面上的示例:

hist(islands, col="gray", labels = TRUE, ylim=c(0, 45))

enter image description here

获得百分比更为复杂。我知道这样做的唯一方法是直接操作调用hist()返回的对象,如我对this similar question的回答中的更详细描述:

histPercent <- function(x, ...) {
   H <- hist(x, plot = FALSE)
   H$density <- with(H, 100 * density* diff(breaks)[1])
   labs <- paste(round(H$density), "%", sep="")
   plot(H, freq = FALSE, labels = labs, ylim=c(0, 1.08*max(H$density)),...)
}

histPercent(islands, col="gray")

enter image description here

答案 1 :(得分:5)

在条形图或直方图中在条形顶部添加数字会扭曲条形图的视觉解释,即使将标签放在靠近顶部的条形图内也会产生模糊的顶部效果,使观看者难以正确解释图形。如果这个数字很有意义,那么这会创建一个布局不佳的表,为什么不创建一个合适的表。

如果您真的觉得需要添加数字,那么最好将它们放在条形下方或沿着上边距,以便它们排列更好以便于比较,并且不会干扰图形的视觉解释。可以使用textmtext函数将标签添加到基本图表中,并且可以在hist函数的返回值中找到x位置。可以使用grconvertY函数计算绘图高度。