我正在尝试生成一个ggplot2图,该图将我的数据顺序保留为geom_bar的填充美感。以前,ggplot2将保留此顺序,如图here所示。看来我期望的功能是under fire,并且ggplot更新了factor的默认行为。当我尝试绘制时间序列数据时,这让我很困惑。
我尝试了第一个链接上描述的“ 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版“ Bug In Your Hair”,并使用以下代码,我能够获得未分组的条形颜色并保留数据框的顺序:
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(羽毛喷涂)上实现相同的输出。