Добавление текста на панели в решетчатой ​​диаграмме - PullRequest
3 голосов
/ 02 ноября 2011

Я пытаюсь добавить метки к столбцам в решетчатой ​​диаграмме с несколькими панелями.Я получаю слишком много ярлыков (каждый ярлык на каждой панели).

Вот мой код:

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 Ответ

8 голосов
/ 02 ноября 2011

Основной вопрос здесь заключается в том, как добавить метки в составную диаграмму в lattice. Ответ содержится в этом вопросе , но поскольку связанный ответ не имеет нескольких панелей, я воссоздаю более простой ответ, используя базу R здесь:

Вы должны изменить функцию панели следующим образом:

  • Рассчитать совокупную сумму значений x для каждого значения y
  • Это классическая проблема разделения, применения, объединения. Вы можете использовать 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)
         }
)

enter image description here

...