2017-02-08 2 views
2

私はggplot2のgeom_bar()でグラフィカルに描画し、変数を埋めたいと思う堆積物のコアデータセットを持っています。 fill変数はfillの他のすべてのレベルと交互に表示されますが、ggplot2の新しいバージョン(2.2.1)ではこの塗りつぶしパターンを維持できません。これは議論されているhereしかし、私は実行可能な解決策を見つけることができません。geom_bar()の順序をggplot2で維持する

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) 

Order not maintained

私はggplot2バージョン2.1データフレームの順序をロードした場合のデータフレーム

の秩序を維持していないggplotの最新バージョンが維持されている:

library(devtools) 
install_version("ggplot2", version = "2.1.0", repos = "http://cran.us.r-project.org") 
library(ggplot2) 

ggplot(df, aes(x=site, y=sedcore, fill=fill)) + geom_bar(position="stack",stat="identity",colour="black",size=0.35) 

同じ正確なコードで次の順序が維持されます。 Order maintained

データフレームからの注文を維持する方法についてアドバイスしてください。私は自分のデータフレームと異なる位置とスタック条件を並べ替えることを試みましたが、これを理解することはできません。

ご協力いただきありがとうございます。

+0

一つハックソリューションはbarplotの各層のための別の因子レベルを作成し、色を定義するためにscale_fill_manualを使用することであろう各要因レベルごとにしかし、ggplotのデータはfactorでソートされるので、一般的には最初の出力が好ましいと思います。 – thc

答えて

1

@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) 
によって示唆されるようにハック溶液

enter image description here

関連する問題