3

我尝试在具有多个面板的格子条形图中向条形添加标签。我最终得到了太多标签(每个标签都在每个面板中)。

这是我的代码:

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)and Petal.Width + Petal.Length)。有没有更好的办法?

先感谢您!!!

4

1 回答 1

8

这里的根本问题是如何将标签添加到lattice. 问题中提供了答案,但由于链接的答案没有多个面板,因此我在此处使用基础 R 重新创建了一个更简单的答案:

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

  • 计算每个 y 值的 x 值的累积和
  • 这是一个经典的拆分、应用、组合问题。您可以plyr为此使用(如链接的答案中所示),或者,如我所说明的,split并且do.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)
         }
)

在此处输入图像描述

于 2011-11-02T11:13:36.667 回答