2012-12-22 18 views
6

黒の背景を持つggplot2テーマを使用する場合、色ガイド以外のガイドの凡例色を制御して黒く塗りつぶさないようにできますか?もしそうなら、どうですか?ggplotの色ガイドではない凡例要素の色を制御します

library(ggplot2) # needs to be 0.9.3 for this theme 
data(iris)  # included with ggplot2 

theme_black<- function (base_size = 16, base_family = ""){ 
    theme_minimal() %+replace% 
     theme(
       line = element_line(colour = "white", size = 0.5, linetype = 1, 
         lineend = "butt"), 
       rect = element_rect(fill = "white", 
         colour = "white", size = 0.5, linetype = 1), 
       text = element_text(family = base_family, 
         face = "plain", colour = "white", size = base_size, 
         angle = 0, lineheight = 0.9, hjust = 0, vjust = 0), 
       plot.background = element_rect(colour = 'black', fill = 'black'), 
       plot.title = element_text(size = rel(1.2)), 
       panel.border = element_rect(fill = NA, colour = "white"), 
       panel.grid.major = element_line(colour = "grey20", size = 0.2), 
       panel.grid.minor = element_line(colour = "grey5", size = 0.5), 
       strip.background = element_rect(fill = "grey30", colour = "grey30") 
      ) 
    } 

ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width, shape=Species, 
     colour=Petal.Length))+geom_point()+theme_black()+ 
     scale_colour_gradient(low = "purple", high = "white") 

あなたが見ることができるようにそれが見えないので、伝説の形状部分のデフォルトの色は、変更されていない、もう1つはこれである種の言うことはできません。

enter image description here

今私が持っている解決策はlegend.backgroundの色を変更することですが、これはインクと醜いの無駄です。

+1

これは部分的な修正です: '+ guides(shape = guide_legend(override.aes = list(color =" white ")))'。残念ながら、 'theme()'はデフォルトのポイントカラーのようなものを変更するためには使用できません。 – bdemarest

+0

この返答ありがとうございます(+1)。私は答えとして追加する価値があると思う:私は確かにそれをupvoteだろう。 – MattBagg

答えて

1

一つの方法は、2つの余分なgeom_point秒を追加することです、ロジックは次のようになります。

プロット白点の伝説のために、例えば、無伝説であなたの色の点をプロット、その後、無伝説と黒の点でそれらをカバーしています。

geom_point(colour="white",size=1) + 
geom_point(colour="black",size=3,show_guide=FALSE) + 
geom_point(show_guide=FALSE) 
+0

答えをありがとう! (なぜ、あなたは黒のgeom_pointを必要としますか?トップには白いものが含まれていますので、縁が白く見えますか?)テーマを変更しても、コードに余分なレイヤーを追加してください。 – MattBagg

+0

ポイントの不完全なカバレッジをプロットするときに気が付いた。サイズが異なる限り、それは大丈夫でしょうし、おそらく黒をスキップします(あなたの着色ポイントのポイントサイズに拘束されたくない場合は黒点オプションがあると思います) –

2

短い答えは、これを行うには完全な方法がないようです。

私は受け入れた@ user1317221_Gの答えに従って、シェイプガイド付きの隠しレイヤーを追加できます。しかし余計な計算であり、pdfとして保存すると、これらの隠れたレイヤーが存在することが予想されます。

+ guides(shape=guide_legend(override.aes=list(colour="white")) 

をしかし、これはまだちょうど+ theme_black()

超えテーマ固有のコードを追加するために私たちを強制的に:@bdemarestはコメントで示唆するよう

代わりに、我々は、形状のガイドの色を上書きすることができます私はペーパー(灰色/白地)またはスクリーン(黒色背景)のプロットを作成しているかどうかによって、セッションのデフォルトテーマを設定しているため、少し複雑なバージョンを実装しました。 ggplot続い

set_theme(theme_black); defaultcol = "white" # for slides 
# or 
set_theme(theme_bw); defaultcol = "black" # for paper 

()この含まれています:だから、私のアプローチは、初期のセッションでは、これらの線に沿って何かを実行することです。これはTHEME-の必要性を最小限にするという利点がある

+ guides(shape=guide_legend(override.aes=list(colour=defaultcol)) 

それはテーマを使ってデフォルトのggplot2カラーを制御できるほど良くはありませんが、プロットに対する特別な調整が必要です。

関連する問題