将标签添加到格子条形图

时间:2010-01-27 13:22:56

标签: r bar-chart lattice

我想将每个条形图的值放在每个条形图顶部的条形图(格子)中。但是,我找不到任何可以实现此目的的选项。我只能找到轴的选项。

4 个答案:

答案 0 :(得分:19)

创建自定义面板功能,例如

library("lattice")
p <- barchart((1:10)^2~1:10, horiz=FALSE, ylim=c(0,120),
              panel=function(...) { 
                args <- list(...)
                panel.text(args$x, args$y, args$y, pos=3, offset=1)
                panel.barchart(...)
              })
print(p)

lattice barchart with labels

答案 1 :(得分:0)

我建议使用新的directlabels package,它可以与格子和ggplot一起使用(并使这些标签问题的生活变得非常容易),但不幸的是它不适用于条形图。

答案 2 :(得分:0)

因为无论如何我必须这样做,所以这里有一个足够接近它的代码样本,就像@Alex Brown所建议的那样(分数是某种类型的2D数组,它会变成一个分组矢量):

barchart(scores, horizontal=FALSE, stack=FALSE, 
     xlab='Sample', ylab='Mean Score (max of 9)',
     auto.key=list(rectangles=TRUE, points=FALSE),
     panel=function(x, y, box.ratio, groups, errbars, ...) {
         # We need to specify groups because it's not actually the 4th 
         # parameter
         panel.barchart(x, y, box.ratio, groups=groups, ...)
         x <- as.numeric(x)
         nvals <- nlevels(groups)
         groups <- as.numeric(groups)
         box.width <- box.ratio / (1 + box.ratio)
         for(i in unique(x)) {
             ok <- x == i
             width <- box.width / nvals
             locs <- i + width * (groups[ok] - (nvals + 1)/2)
             panel.arrows(locs, y[ok] + 0.5, scores.ses[,i], ...)
         }
     } )

我没有对此进行测试,但重要的位(确定面板功能中的位置等的部分)确实有效。这是难以理解的。在我的情况下,我实际上使用panel.arrows来制作错误栏(恐怖!)。但score.ses意味着与分数相同的数组。

我稍后会尝试清理它 - 但如果有其他人愿意,我很高兴它!

答案 3 :(得分:-1)

如果您使用groups参数,您会发现@ rcs代码中的标签全部相互叠加。这可以通过扩展panel.text来修复,就像panel.barchart一样,如果你知道R.这很容易。

由于许可原因,我无法在此处发布修补程序的代码,抱歉。