R 保持几何图形条()的顺序,用ggplot2填充

R 保持几何图形条()的顺序,用ggplot2填充,r,ggplot2,geom-bar,R,Ggplot2,Geom Bar,我有一个沉积物岩心数据集,我想用ggplot2中的geom_bar()以图形方式描绘,并用变量填充。填充变量与其他填充级别交替,但对于ggplot2的新版本(2.2.1),我无法保持此填充模式。对此进行了讨论,但我找不到可行的解决方案 library(ggplot2) site<-c(rep('a',14),rep('z',8)) sedcore<-1 fill<-c("y","n","y","n","y","n","y","n","y","n","y","n","y","n"

我有一个沉积物岩心数据集,我想用ggplot2中的geom_bar()以图形方式描绘,并用变量填充。填充变量与其他填充级别交替,但对于ggplot2的新版本(2.2.1),我无法保持此填充模式。对此进行了讨论,但我找不到可行的解决方案

library(ggplot2)
site<-c(rep('a',14),rep('z',8))
sedcore<-1
fill<-c("y","n","y","n","y","n","y","n","y","n","y","n","y","n","y","n","y","n","y","n","y","n")
df <- data.frame(cbind(site,sedcore,fill))

ggplot(df, aes(x=site, y=sedcore, fill=fill)) + geom_bar(position="stack",stat="identity",colour="black",size=0.35)
现在,相同的精确代码保持顺序:

请告知如何维护来自dataframe的订单。我已经尝试重新排序我的数据帧和不同的位置和堆栈条件,但无法解决这个问题


提前感谢您的帮助。

这是@thc建议的黑客解决方案

df$fill <- paste0(sprintf('%06d',1:nrow(df)), df$fill)
ggplot(df, aes(x=site, y=sedcore, fill=fill)) + geom_bar(position="stack",stat="identity",colour="black",size=0.35) + 
  scale_fill_manual(values=ifelse(grepl('y',df$fill), 'steelblue', 'red')) +
  guides(fill=FALSE)

df$fill一个hack-y解决方案是为条形图中的每个图层创建另一个因子级别,然后使用scale\u fill\u手册定义每个因子级别的颜色。然而,我认为第一个输出通常更可取,因为ggplot中的数据是按因子排序的。
df$fill <- paste0(sprintf('%06d',1:nrow(df)), df$fill)
ggplot(df, aes(x=site, y=sedcore, fill=fill)) + geom_bar(position="stack",stat="identity",colour="black",size=0.35) + 
  scale_fill_manual(values=ifelse(grepl('y',df$fill), 'steelblue', 'red')) +
  guides(fill=FALSE)