Добавление текста на панели в решетчатой ​​диаграмме

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

Вот мой код:

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

Решение

Основной вопрос здесь заключается в том, как добавить метки в составную диаграмму в 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)
         }
)

введите описание изображения здесь

Другие вопросы по тегам