Как построить y-зависимую эстетику заливки, используя ggplot2 geom_bar? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь сгенерировать график ggplot2, который сохраняет порядок моих данных для эстетики заполнения geom_bar. Ранее ggplot2 сохранял этот порядок, как показано здесь . Кажется, что функциональность, которую я ожидал, была под огнем , и ggplot обновил поведение по умолчанию для факторов. Поскольку я пытаюсь построить данные временных рядов, это поставило меня в тупик.

Я попытался воспользоваться решением «hack-y», описанным в первой ссылке, но безрезультатно, поскольку системе требуется слишком много времени для отображения каждого конкретного фактора и цвета.

В прошлом мне удавалось использовать следующий код для генерации графиков, которые не объединяли объединяющиеся области с одинаковой эстетикой заполнения, и время обработки не было слишком большим. Я полагаю, что решение этого вопроса является относительно тривиальным - нюанс в R, который я пропускаю, возможно, - но любая помощь в этом вопросе будет принята с благодарностью.

Что я получаю:

image from link 1

Желаемая:

image from link 2

plot <- ggplot(markovcolumnformat, aes(x=ID, y= time, fill = Pattern)) + 
          coord_flip() + 
          geom_bar(stat='identity', position = position_stack(reverse = TRUE)) + 
          scale_y_continuous(breaks = seq(0, maxtime, 1440)) + 
          ggtitle(name) + scale_fill_manual(values=colors[rangeofcolors]) + 
          theme(text = element_text(family = "Times New Roman"), 
                plot.title = element_blank(), 
                legend.position = "none", 
                legend.title=element_blank())

Данные:

             ID Time Pattern time
1: PUH-2013-145    1       1    1
2: PUH-2013-145    2       1    1
3: PUH-2013-145    3       1    1
4: PUH-2013-145    4       1    1
5: PUH-2013-145    5       1    1
6: PUH-2013-145    6       1    1

#time variable is '1'
#Pattern relates to bar fill (1-5, death (absorbing state), awake (absorbing state))
#time is up to 7200 for each ID    

Мне удалось получить несгруппированные цвета столбцов и сохранить порядок моего фрейма данных путем понижения ggplot до версии 2.1 и R до версии 3.3.1 «Ошибка в ваших волосах» и со следующим кодом:

plot<-ggplot(markovcolumnformat, aes(x=ID, y= time, fill = Pattern)) + 
geom_bar(stat='identity') + coord_flip() + 
scale_y_continuous(breaks=seq(0,maxtime,by=1440))+ labs(y = "Time (Minutes)", 
x = "Patient") + ggtitle(name) + scale_fill_manual(values=colors) + 
theme(axis.text.y=element_blank(), 
text= element_text(family="Times New Roman"), plot.title = element_blank(),
legend.position="none", legend.title=element_blank())
print(plot)

Мне интересно знать, как добиться того же результата на последней версии ggplot2 (3.1) и R версии 3.5.1 (Feather Spray).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...