диаграмма с несколькими областями в решетке

Я довожу lattice до предела.

Рассмотрим этот пример

tibble(time = c(ymd('2019-01-01'),
                      ymd('2019-01-02'),
                      ymd('2019-01-03'),
                      ymd('2019-01-01'),
                      ymd('2019-01-02'),
                      ymd('2019-01-03'),
                      ymd('2019-01-01'),
                      ymd('2019-01-02'),
                      ymd('2019-01-03')),
             variable = c('a','a','a','b','b','b', 'c','c','c'),
             value = c(1,2,3,0,0,2,2,4,3)) %>% 
  ggplot(aes(x = time, y = value, fill = variable)) + geom_area()

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

Используя хорошее решение в , как создать диаграмму с областями с накоплением в решетке ? здесь не работает, возможно, потому, что у нас несколько областей.

Можем ли мы сделать это с lattice? Спасибо!


person ℕʘʘḆḽḘ    schedule 13.06.2019    source источник
comment
связанные: stackoverflow.com/questions/56579576/ для дальнейшего использования   -  person M--    schedule 13.06.2019


Ответы (1)


library(dplyr)
library(lubridate)
library(lattice)
library(latticeExtra)

df1 <- tibble(time = c(ymd('2019-01-01'),
                       ymd('2019-01-02'),
                       ymd('2019-01-03'),
                       ymd('2019-01-01'),
                       ymd('2019-01-02'),
                       ymd('2019-01-03'),
                       ymd('2019-01-01'),
                       ymd('2019-01-02'),
                       ymd('2019-01-03')),
              variable = c('a','a','a','b','b','b', 'c','c','c'),
              value = c(1,2,3,0,0,2,2,4,3))

df2 <- df1 %>% group_by(time) %>% mutate(val=cumsum(value))

xyplot(val~time, df2, group=variable,
       panel=function(x,y,...){
         panel.xyarea(x,y,...)
         panel.xyplot(x,y,...)},
       alpha=c(0.9,0.6,0.3)) 

Создано 13 июня 2019 г. с помощью пакета reprex (v0.3.0)

person M--    schedule 13.06.2019
comment
отлично! но можете ли вы установить цвета с помощью трюка par.settings? у меня не работает - person ℕʘʘḆḽḘ; 13.06.2019
comment
Спасибо, бро. довольно полезно. ggplot довольно бесполезен для временных рядов - person ℕʘʘḆḽḘ; 13.06.2019
comment
@ℕʘʘḆḽḘ вы можете использовать par.settings=simpleTheme(col=c("red", "blue","green")), alpha=c(1,0.3,0.1) не идеально, хотя. И ты шутишь насчет ggplot и timeseries, да? - person M--; 13.06.2019
comment
да... проблема в том, что вы не можете выбрать цвета, потому что они накладываются друг на друга... на моей реальной диаграмме это очень беспорядочно... может здесь есть альтернативное решение? - person ℕʘʘḆḽḘ; 13.06.2019
comment
@ℕʘʘḆḽḘ какие у тебя претензии к ggplot? это сделает работу. Если вы хотите, чтобы a было внизу, а c вверху, просто выполните рефакторинг данных. - person M--; 13.06.2019
comment
Спасибо, бро. просто шучу про ggplot. но решетка отлично подходит для двойной оси и быстрого ТС, а именно - person ℕʘʘḆḽḘ; 13.06.2019
comment
возможно какая-то дополнительная тонкость. Вы знаете, как добавить легенду/ключ, который сопоставляется с цветами? - person ℕʘʘḆḽḘ; 13.06.2019
comment
@ ℕʘʘḆḽḘ, возможно, это сработает: stackoverflow.com/questions/35805016/ - person M--; 13.06.2019
comment
@ℕʘʘḆḽḘ Последний комментарий. Я сумасшедший, но вы можете попробовать сделать пару файлов shp с точками для каждой из этих областей и построить эти файлы формы, а затем добавить ось и сделать метки, чтобы показать, что вам действительно нужно. Все, что я могу придумать. Опять же, это безумие. Гораздо проще обмануть ggplot и вторичную ось с другим масштабом, чем делать то, что я только что сказал. - person M--; 13.06.2019