2016-04-28 22 views
0

私はRの初心者です。ggplot2を使ってかなり基本的なデータからグラフを作成するコードを書いています。私の描画コードは、現在、次のようになりますgeom_hlineのためのggplotの第2凡例が必要

chart1_data = read.csv(data_file, as.is=T) 
chart1_means = read.csv(means_file, as.is=T) 

p = ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) + 
geom_bar(stat="identity", position=position_dodge()) + 
geom_hline(data=chart1_means, aes(yintercept=value), show.legend=FALSE) 

これは平均値を表すバーの両端の黒い水平線とグループ化垂直バーのグラフを描画し、垂直バーの色分けを示す凡例を有しています。

  1. 表示水平ライン(geom_hline)色(Rが持つ色のデフォルトセット、chart1_meansテーブル内の行の様々な番号にマップ:

    は、私は物事のカップルをしたいです)

  2. これらの線の色を示し、テキストラベルであるchart1_meansファイルの列1の値にマッピングする2番目の凡例を示します。明確にするために

chart1_means CSVファイルには、次のようになります。私はこれで失敗しGoogleで検索している

year,medicine,entity,usage,units 
2006,Codeine,Mexico,0.8,mg/capita 
2006,Codeine,Cuba,NA,mg/capita 
etc. 

label,value 
USA Codeine mean, 14.2 
Canada Codeine mean, 12.7 
etc. 

そしてchart1_dataのCSVファイルには、次のようになります。似たようなことをする方法はたくさんあるようですが、私が見つけることができるものは全くありません。

UPDATE更新UPDATE

私は修正に近いが、まだ間違っているものを設計する際にbethanyPのアドバイスを取りました。コードは現在、次のようになります。

chart1_data = read.csv(data_file, as.is=T) 
chart1_means = read.csv(means_file, as.is=T) 

means_labels = chart1_means$label 
colors = rainbow(length(means_labels)) 

p = ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) + 
geom_bar(stat="identity", position=position_dodge(), show.legend=TRUE) + 
geom_hline(data=chart1_means, aes(yintercept=value), color=colors) + 
scale_fill_manual("means", values=colors, guide=guide_legend(override.aes = list(colors))) 

結果は、色付きの棒(良い)が、それでも一つだけの伝説を重ねるラインを着色されています。凡例は "手段"(行指向のデータ)のタイトルを持っていますが、 "医薬品"(バー指向のデータ)の色とラベルを示しています。

私は私が代わりにこれを行うことができるかもしれないと思った:

scale_fill_manual("means", values=colors, labels=means_labels) 

が、これはタイトルの「手段」、バーに関連付けられた色、そして "のサブセットであるラベルを持つ単一の伝説を埋めmeans_labels "(平均線よりも棒が少ないため)。

私はずいぶん歩いています。 2つの異なるデータ系列から2つの伝説が必要です。その他の提案はありますか?

答えて

1

geom_barshow_guide = TRUEを追加して、プライマリ凡例のプロットのコンテンツの凡例を作成するように明示してください。

+ geom_bar(stat="identity", position=position_dodge(), show_guide = TRUE) 

あなたはgeom_hlineに引数、color = "red"を追加するだけでhlineに色を得ることができます。あなたがそれにいる間に、特に色々な色の複数の行を追加している場合は、fill="some text here"引数を追加して2番目の凡例の行にラベルを付けます。

+ geom_hline(data=chart1_means, aes(yintercept=value), fill="mean", color="red") 
+ geom_hline(data=chart1_sd, aes(yintercept=value), fill="Standard Deviation", color="pcreateurple") 

次に、あなたはあなたの家道の残りの部分を取得するためにguide=guide_legendscale_fillを使用することができます使用することができます。

+ scale_fill_manual("Means & SD", guide=guide_legend(override.aes = list(color=c('purple", "red"))) 

また、色のリストを保持する変数を作成し、あなたがある場合は、各使用するには、リスト内のどの色を指定するには、変数名と整数を使用することによって、それらを指定することができますパレットをコンテナとして使用します。

色と行に問題があり、予想外の場所や凡例に間違ったものがある場合は、ggplot関数の行の順番を見てください。

geom_hlineの前にscale_fill_manualがあると、あなたのバーのような間違った美しさの凡例が作成され、作成されることがあります。あなたが正しい場所にそれらを持っているまで、カットアンドペーストしてください。

ggplotは驚くほど強力で完全に直感的ではありません。私はこの事を助けるためにいつも私とチートシートを持っています。そこには恥がありません。 Rstudioには良いものがあります。

+0

自分のコードを現在のフォームに更新しました。 – Barry

関連する問題