在格子条形图中向面板添加文本

时间:2011-11-02 09:23:29

标签: r panel labels bar-chart lattice

我尝试在带有多个面板的点阵条形图中为条形添加标签。我最终得到了太多标签(每个面板都有标签)。

这是我的代码:

library(lattice)
data(iris)

barchart(seq(1,50) ~ Petal.Width + Petal.Length | Species, data = iris, stack = TRUE,
         panel=function(x, y, ...) {
               panel.barchart(x, y, ...);
               ltext(x=iris$Petal.Width/2, y=y, labels=iris$Petal.Width, cex = 0.5);
               ltext(x=iris$Petal.Width + iris$Petal.Length/2, y=y, labels=iris$Petal.Width, cex = 0.5);
         }
)

我该怎么做?

奖金问题:
除了它没有按预期工作,我认为我的代码效率不高(尤其是seq(1,50)Petal.Width + Petal.Length)。还有更好的方法吗?

提前谢谢!!!

1 个答案:

答案 0 :(得分:8)

此处的基本问题是如何在lattice中向堆叠条形图添加标签。答案在this question中提供,但由于链接的答案没有多个面板,我在这里使用基本R重新创建一个更简单的答案:

您必须按如下方式修改面板功能:

  • 计算每个y值
  • 的x值的累积和
  • 这是一个经典的拆分,应用,组合问题。您可以使用plyr(如链接的答案中所示),或者如我所说,splitdo.call

xx <- do.call(c, unname(lapply(split(x, y), function(t)cumsum(t)-t/2)))

代码:

barchart( 1:10 ~ Petal.Width + Petal.Length | Species, 
          data = iris[c(1:10, 51:60, 101:110), ], 
          stack = TRUE,
          panel=function(x, y, ...) {
            panel.barchart(x, y, ...)
            xx <- do.call(c, unname(lapply(split(x, y), function(t)cumsum(t)-t/2)))
            ltext(xx, y=y, labels=x)
         }
)

enter image description here