2017-03-02 25 views
0

私はggplot2で「鳥瞰図」または「ダーツボード」プロットを作成しています。私が作成している図にグラデーションの凡例を手動で追加する方法があるか、またはその凡例を追加するための手順を変更する方法があるかどうかを尋ねたいと思います。ここでggplot2で手書きグラデーションの凡例を追加

はで動作するように再現可能なデータセットである:ここでは

step <- 0.1 
frac <- seq(0, 1, step) 
df <- data.frame(l=levels(cut(0, breaks=frac)), o=frac[1:length(frac)-1], f=c(0.000, 0.028, 0.165, 0.151, 0.149, 0.129, 0.138, 0.060, 0.090, 0.088), cols=c('#0000FF','#4343FF','#FF4343','#FF6969','#FF7070','#FFA4A4','#FF8E8E','#9D9DFF','#F0F0FF','#E8E8FF')) 

それは次のようになります。ここでは

> df 
df 
      l o  f cols 
1 (0,0.1] 0.0 0.000 #0000FF 
2 (0.1,0.2] 0.1 0.028 #4343FF 
3 (0.2,0.3] 0.2 0.165 #FF4343 
4 (0.3,0.4] 0.3 0.151 #FF6969 
5 (0.4,0.5] 0.4 0.149 #FF7070 
6 (0.5,0.6] 0.5 0.129 #FFA4A4 
7 (0.6,0.7] 0.6 0.138 #FF8E8E 
8 (0.7,0.8] 0.7 0.060 #9D9DFF 
9 (0.8,0.9] 0.8 0.090 #F0F0FF 
10 (0.9,1] 0.9 0.088 #E8E8FF 

はプロットを生成するための再現性のコードです:

library(ggplot2) 
#pdf("test.pdf", width=8, height=8) 
p <- ggplot() + ylim(0, 1) + geom_rect(aes(xmin=-1, ymin=df$o, xmax=1, ymax=df$o+step), fill=df$cols) + coord_polar() + theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) 
print(p) 
#dev.off() 

そして、ここにこのコードが生成するプロットがあります - 基本的に、希望の色の塗りつぶしを持つ同心円のセット:

Bullseye

私はdf$fの最小/最大を使用してラベルで、終了色に開始色から(線形)グラデーションを表示し、このプロットに凡例バーを追加したいと思います。

dfから、または別のcolorRampPaletteオブジェクトの最初と最後のエントリから手動で開始と終了の色を指定することができます。または、colorRampPaletteオブジェクトのカラー配列を指定して補間された色を提供します。私はちょうどメインプロットから別の凡例オブジェクトを生成する方法を知りません。

手動でこのようなオブジェクトを作成してこのプロットに追加する方法はありますか?

私が試みたいくつかのことは、guide_colourbar() objectscale_colour_gradientn()オブジェクトを探索することでしたが、これらのエンティティを使用して私のプロットに何も取得できませんでした。ここでそれらを使用する方法はありますか?

答えて

3

素敵な伝説を得る最も簡単な方法は、設計意図がggplotのように実際にデータにマッピングする必要があります。

方法1、あなたの色変数にマップfillと提供されるような正確な色を使用するscale_identityを使用:

ggplot(df) + 
    ylim(0, 1) + 
    geom_rect(aes(xmin = -1, ymin = o, xmax = 1, ymax = o + step, fill = cols)) + 
    coord_polar() + 
    scale_fill_identity(guide = guide_legend()) 

enter image description here

凡例は、それが連続していないので、しかし、所望される葉間違った順序で並べられ、ラベルの値の代わりにカラーコードが表示されます。さらに、異なる色はそれらのマッピングされた値において等距離ではない。

方法2では、適切なカラーバーを得るために実際の連続したスケール(指定していない)を使用することができます。ここでは、私がggplotにあなたの極値から白までの連続的なスケールを作成させることができる、あなたが作業できる試みがあります。

ggplot(df) + 
    ylim(0, 1) + 
    geom_rect(aes(xmin = -1, ymin = o, xmax = 1, ymax = o + step, fill = f)) + 
    coord_polar() + 
    scale_fill_gradient2(midpoint = mean(range(df$f)), low = '#0000FF', high = '#FF4343') 

enter image description here

+1

私は親切な助けに感謝ので、私はまだggplotを学んでいます。 –

関連する問題