2017-01-10 8 views
1

棒グラフを作成して、各グループの棒の平均値も表示したいと考えています。 ANDは凡例の平均バーを表示します。geom_barプロットにグループ平均線を追加して凡例に含める

私はこのグラフを得ることができました。以下のコードを使って棒グラフを作成することはできましたが、これは凡例の平均行を見たいと思っています。

enter image description here

##The data to be graphed is the proportion of persons receiving a treatment 
## (num=numerator) in each population (denom=demoninator). The population is 
##grouped by two age groups and (Age) and further divided by a categorical 
##variable V1 

###SET UP DATAFRAME### 
require(ggplot2)  
df <- data.frame(V1 = c(rep(c("S1","S2","S3","S4","S5"),2)), 
       Age= c(rep(70,5),rep(80,5)), 
       num=c(5280,6570,5307,4894,4119,3377,4244,2999,2971,2322), 
       denom=c(9984,12600,9425,8206,7227,7290,8808,6386,6206,5227)) 

df$prop<-df$num/df$denom*100 

PopMean<-sum(df$num)/sum(df$denom)*100 

df70<-df[df$Age==70,] 
group70mean<-sum(df70$num)/sum(df70$denom)*100 

df80<-df[df$Age==80,] 
group80mean<-sum(df80$num)/sum(df80$denom)*100 

df$PopMean<-c(rep(PopMean,10)) 
df$groupmeans<-c(rep(group70mean,5),rep(group80mean,5)) 

私は、プロットは次のようになりたいのですが、「グループの平均値」または類似したとしてラベル付けされるように、あまりにも伝説に行をしたいです。

#basic plot 
P<-ggplot(df, aes(x=factor(Age), y=prop, fill=factor(V1))) + 
    geom_bar(position=position_dodge(), colour='black',stat="identity")  

P 
####add mean lines  
P+geom_errorbar(aes(y=df$groupmeans, ymax=df$groupmeans, 
ymin=df$groupmeans), col="red", lwd=2) 

show.legend = TRUEを追加すると、エラーバーが別個ではなく、要素の凡例にオーバーレイされます。凡例にgeom_errorbarを別々に表示する方法があれば、これはおそらく最も簡単な解決策です。構文は以下の人口の平均値の行を生成するが、これは人口意味の行を生成し、各点の中心から実行しているのではなく、バー の幅をカバーし、私もgeom_line でいろいろなことを試してみました

伝説を生み出しますが、ラインではなく色のバーを示すものです。

P+geom_line(aes(y=df$PopMean, group=df$PopMean, color=df$PopMean),lwd=1) 

私はグループのためにラインを実行しようとした場合(彼らは唯一の単一ポイントであるので)ラインが表示されていないことを意味します。

P+geom_line(aes(y=df$groupmeans, group=df$groupmeans, color=df$groupmeans)) 

これは私のカテゴリ変数は、それが動作するように取得する数値であるふりをする私を必要とするが、私はまた、ファセットプロットでこのラウンドを取得しようとしました。

###set up new df 
df2<-df 
df2$V1<-c(rep(c(1,2,3,4,5),2)) 

P<-ggplot(df2, aes(x=factor(V1), y=prop, fill=factor(V1))) + 
    geom_bar(position=position_dodge(),  
    colour='black',stat="identity",width=1) 

P+facet_grid(.~factor(df2$Age)) 

P+facet_grid(.~factor(df2$Age))+geom_line(aes(y=df$groupmeans, 
group=df$groupmeans, color=df$groupmeans)) 

Facetplot

enter image description here

それはむしろ色よりも色のグラデーションを示し、右見ていないが(これはgeom_lineを使用して、私は平均線を表示することができますので、凡例は表示されませんライン!)。しかし、線はまだバーの全幅には達しません。また、私のx軸は、数値ではなくS1、S2などを表示するためにラベルを変更する必要があります。1,2,3

要約すると、エラーバーの行を凡例に別々に表示する方法はありますか?

もし私がファセットを使用しているならば、凡例の外観を修正し、カテゴリ変数で軸を再ラベル付けするにはどのようにして線をプロットの幅いっぱいにすることができますか?

または、私が紛失している代替ソリューションがありますか。あなたはaescolour引数を渡す必要がgeom_errorの凡例を取得するために

おかげ

+0

ダミー変数を最初に作成しましたが必要とされていません。列名を指定するだけです。 –

答えて

2

。 あなたが唯一のカテゴリ(ここでは赤を)したいと、私はaes` `以内` $ `を使用して

df$mean <- "Mean" 
ggplot(df, aes(x=factor(Age), y=prop, fill=factor(V1))) + 
    geom_bar(position=position_dodge(), colour='black',stat="identity") + 
    geom_errorbar(aes (ymax=groupmeans, 
       ymin=groupmeans, colour=mean), lwd=2) + 
    scale_colour_manual(name="",values = "#ff0000") 

enter image description here

関連する問題