Я пытаюсь сгенерировать график ggplot2, который сохраняет порядок моих данных для эстетики заполнения geom_bar. Ранее ggplot2 сохранял этот порядок, как показано здесь . Кажется, что функциональность, которую я ожидал, была под огнем , и ggplot обновил поведение по умолчанию для факторов. Поскольку я пытаюсь построить данные временных рядов, это поставило меня в тупик.
Я попытался воспользоваться решением «hack-y», описанным в первой ссылке, но безрезультатно, поскольку системе требуется слишком много времени для отображения каждого конкретного фактора и цвета.
В прошлом мне удавалось использовать следующий код для генерации графиков, которые не объединяли объединяющиеся области с одинаковой эстетикой заполнения, и время обработки не было слишком большим. Я полагаю, что решение этого вопроса является относительно тривиальным - нюанс в R, который я пропускаю, возможно, - но любая помощь в этом вопросе будет принята с благодарностью.
Что я получаю:
Желаемая:
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).