Добавление текста на панели в решетчатой диаграмме
Я пытаюсь добавить метки к стержням в решетчатой диаграмме с несколькими панелями. Я получаю слишком много ярлыков (каждый ярлык на каждой панели).
Вот мой код:
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)
}
)