2016-05-03 19 views
1

rの下にggplot2でオーバーレイされた1つのグラフに表示しようとしている2つのデータセットがあります。データセット1は、グループ化された棒グラフとして表示する必要があります(国ごとに1つのグループ - データセットにはいくつかの国があります)。データセット2は、バーを横切る一連の色付き水平線として表示する必要があります。 2つのデータセットの長さが異なることに注意してください。私は何をしようとしているかを示す下のコードをいくつか持っています(他の人のアドバイスによって設計されています)。rg2plot2でrの2番目の凡例をプロットする方法

library(ggplot2) 

chart1_data <- data.frame(year=c("1998","1998","1998","1998","1998","1998","1998","1998","1998"), medicine=c("Fent","Meth","Morph","Fent","Meth","Morph","Fent","Meth","Morph"), entity=c("Italy","Italy","Italy","Norway","Norway","Norway","Portugal","Portugal","Portugal"), usage=c(3.01,9.32,2.01,1.24,1.43,28.48,5.01,5.51,41.82)) 

chart1_means <- data.frame(label=c("Global Fent","EURO Fent","Global Meth","EURO meth","Global Morph","EURO Morph"), value=c(0.03, 0.07, 1.59, 5.12, 3.28, 8.54)) 

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

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))) 

難易度は、2つの伝説が必要です。 1つはバー用、もう1つはライン用です。これまでの私の試みでは、各データセットの断片をある程度混在させて伝説を作っていました。たとえば、下のチャートでは、タイトルが間違っていて、行は何もない単一の凡例が表示されています。

resulting plot

誰もが私が欲しいものを達成することができます方法についての勧告を持っていますか?任意のポインタが高く評価されました。

+0

質問はありませんここでは、[SO]に属しています。少し待っていれば、これを移行します。 – gung

+1

うわー、誰かが以前に 'rainbow'を呼んでデフォルトのggplotの色を上書きしているのを見たことはないと思います。それは激しいです。 – Gregor

+1

あなたは 'aes'の中で色をマップすることができます – rawr

答えて

2

@rawrが示唆しているように、マップされたものはaes()を使用すると凡例を自動的に取得します。そうする。 R(ggplot2)を使用する方法についての

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 = label)) + 
    scale_fill_manual("means", 
         values = colors) + 
    scale_color_manual("lines (means?)", 
         values = colors, 
         guide = guide_legend(override.aes = list(fill = NA))) 

enter image description here

関連する問題