2016-08-08 4 views
0

ヒストグラムが密度でオーバーレイされるプロットを作成する必要があります。ここに私の結果はこれまでにいくつかの例のデータを使用している:ggplot2:オーバーレイされたプロットの凡例シンボルを調整する

enter image description here

library("ggplot2") 

set.seed(1234) 
a <- round(rnorm(10000, 5, 5), 0) 
b <- rnorm(10000, 5, 7) 
df <- data.frame(a, b) 

ggplot(df) + 
    geom_histogram(aes(x = a, y = ..density.., col = "histogram", linetype = "histogram"), fill = "blue") + 
    stat_density(aes(x = b, y = ..density.., col = "density", linetype = "density"), geom = "line") + 
    scale_color_manual(values = c("red", "white"), 
       breaks = c("density", "histogram")) + 
    scale_linetype_manual(values = c("solid", "solid")) + 
    theme(legend.title = element_blank(), 
     legend.position = c(.75, .75), 
     legend.text = element_text(size = 15)) 

残念ながら、私は適切に凡例のシンボルを変更する方法を見つけ出すことはできません。 最初の記号は比較的太い赤線で、2番目の記号は中央の白線のない青色のボックスにする必要があります。いくつかのインターネット調査に基づき

は、私がscale_linetype_manualに異なるものを変更しようと、さらに私はoverride.aesを使用しようとしましたが、私は、この特定の場合にはそれを使用しなければならない方法を見つけ出すことができませんでした。


EDIT - ここは、以下の非常に有用回答に基づいて最適なソリューションです。

ggplot(df) + 
    geom_histogram(aes(x = a, y = ..density.., linetype = "histogram"), 
       fill = "blue", 
# I added the following 2 lines to keep the white colour arround the histogram. 
       col = "white") + 
    scale_linetype_manual(values = c("solid", "solid")) + 
    stat_density(aes(x = b, y = ..density.., linetype = "density"), 
       geom = "line", color = "red") + 
    theme(legend.title = element_blank(), 
     legend.position = c(.75, .75), 
     legend.text = element_text(size = 15), 
     legend.key = element_blank()) + 
    guides(linetype = guide_legend(override.aes = list(linetype = c(1, 0), 
                fill = c("white", "blue"), 
                size = c(1.5, 1.5)))) 

enter image description here

答えて

1

あなたが思ったとおり、仕事のほとんどはlinetypeためoverride.aesを介して行うことができます。

注記私は、凡例ボックスの輪郭に何らかのトラブルを避けるために、両方のレイヤーのaesからcolorを削除しました。これにより、ファンクションコールが不要になります。濃度ラインの色を設定するには、の外にaesの外側を使用しました。

override.aes Iにおいてfillは、白色または青色のいずれかであること、及びsizeは、それぞれ、濃度ボックスヒストグラムボックス2または0に、linetypeは、固体または空白に設定しました。

ggplot(df) + 
    geom_histogram(aes(x = a, y = ..density.., linetype = "histogram"), fill = "blue") + 
    stat_density(aes(x = b, y = ..density.., linetype = "density"), geom = "line", color = "red") + 
    theme(legend.title = element_blank(), 
      legend.position = c(.75, .75), 
      legend.text = element_text(size = 15), 
      legend.key = element_blank()) + 
    guides(linetype = guide_legend(override.aes = list(linetype = c(1, 0), 
                 fill = c("white", "blue"), 
                 size = c(2, 0)))) 

enter image description here

+1

ありがとう、それは完璧な解決策でした!あなたのコードに2行追加しました。ヒストグラムを白色に保ちたいからです(上記の編集の記事を参照)。 – JSP

1

enter image description herefillcolour美学は、それぞれhistogramdensityとによって標識され、そしてそれらの値はscale_*_manualを使用して設定されています。そうすることで、オーバーライドを必要とせずに目的の凡例に直接マップできます。

ggplot(df) + 
    geom_histogram(aes(x = a, y = ..density.., fill = "histogram")) + 
    stat_density(aes(x = b, y = ..density.., colour="density"), geom = "line") + 
    scale_fill_manual(values = c("blue")) + 
    scale_colour_manual(values = c("red")) + 
    labs(fill="", colour="") + 
    theme(legend.title = element_blank(), 
     legend.position = c(.75, .75), 
     legend.box.just = "left", 
     legend.background = element_rect(fill=NULL), 
     legend.key = element_rect(fill=NULL), 
     legend.text = element_text(size = 15)) 
+0

偉大な答えをありがとう、私は両方のシンボルの共通の伝説を好むので、私はaosmithのsoloutionを取ったが、多くのありがとう。 – JSP

関連する問題