9

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

4

4 回答 4

20

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

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)

带标签的格子条形图

于 2010-01-27T14:53:59.420 回答
0

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

于 2010-01-27T14:25:10.923 回答
0

因为无论如何我都必须这样做,所以这里有一个足够接近的代码示例,符合@Alex Brown 的建议(分数是某种二维数组,它将变成一个分组向量) :

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 是一个与分数相同维度的数组。

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

于 2012-06-09T06:48:42.270 回答
-1

如果您使用该groups参数,您会发现@rcs 代码中的标签全部重叠在一起。这可以通过将 panel.text 扩展为像 panel.barchart 一样工作来解决,如果您了解 R,这很容易。

出于许可原因,我无法在此处发布修复代码,抱歉。

于 2010-01-29T10:50:58.687 回答