2012-01-17 12 views
11

は私がオプション位置を追加しようとしました、次のデータセット複数のヒストグラム - 位置

dataset1=data.frame(obs=runif(20,min=1,max=10)) 
dataset2=data.frame(obs=runif(20,min=1,max=20)) 
dataset3=data.frame(obs=runif(20,min=5,max=10)) 
dataset4=data.frame(obs=runif(20,min=8,max=10)) 

並んでプロットしようとしています=運とgeom_histogramためを「かわします」。どのようにして、次のコードを変更して、ヒストグラムの列を重ならずに並べることができますか?

すべてのデータが単一のデータフレーム内にあり、異なるグループは、データフレーム内の他の変数によって記述されている「長い」データ、で最適に動作しggplot2
ggplot(data = dataset1,aes_string(x = "obs",fill="dataset")) + 
geom_histogram(binwidth = 1,colour="black", fill="blue")+ 
geom_histogram(data=dataset2, aes_string(x="obs"),binwidth = 1,colour="black",fill="green")+ 
geom_histogram(data=dataset3, aes_string(x="obs"),binwidth = 1,colour="black",fill="red")+ 
geom_histogram(data=dataset4, aes_string(x="obs"),binwidth = 1,colour="black",fill="orange") 

答えて

22

。私はあなたがあなたのヒストグラムで使用される値を持っているfill列を追加しましたそのために

DF <- rbind(data.frame(fill="blue", obs=dataset1$obs), 
      data.frame(fill="green", obs=dataset2$obs), 
      data.frame(fill="red", obs=dataset3$obs), 
      data.frame(fill="orange", obs=dataset3$obs)) 

。それを考えると、プロットがで作ることができます。position="dodge"が機能するようになりました

ggplot(DF, aes(x=obs, fill=fill)) + 
    geom_histogram(binwidth=1, colour="black", position="dodge") + 
    scale_fill_identity() 

enter image description here

あなたは区別としてリテラルの塗りつぶしの色を使用する必要はありません。代わりにデータセット番号を使用するバージョンがあります。

DF <- rbind(data.frame(dataset=1, obs=dataset1$obs), 
      data.frame(dataset=2, obs=dataset2$obs), 
      data.frame(dataset=3, obs=dataset3$obs), 
      data.frame(dataset=4, obs=dataset3$obs)) 
DF$dataset <- as.factor(DF$dataset) 
ggplot(DF, aes(x=obs, fill=dataset)) + 
    geom_histogram(binwidth=1, colour="black", position="dodge") + 
    scale_fill_manual(breaks=1:4, values=c("blue","green","red","orange")) 

これは凡例を除いて同じです。

enter image description here

関連する問題