2016-11-20 54 views
3

プロンプトbelowのように、sp :: bubble()を使用して生成された肯定と否定の値を持つバブルチャートの凡例を1つ作成します。R、ggplot2:肯定と否定のバブルチャートで単一の凡例を作成する

はしかし、様々な理由のために私はggplot2でこれを複製します。私が得た最も近いものは、スケーリングされたシンボルで単一の凡例を生成することですが、実際のバブル自体はスケーリングされません。

上記プロットは

# create data frame 
x=sample(seq(1,50),50,T) 
y=sample(seq(1,50),50,T) 
plot_dat=data.frame(x=x,y=y,value=rnorm(50,0,25)) 

# plot 
library(ggplot2) 
ggplot(data=plot_dat, aes(x=x, y=y,colour=factor(sign(value)), size=value)) + 
geom_point() + 
scale_size(breaks = c(-40,-30,-20,-10,0,10,20,30,40,50), range = c(0.5,4)) + 
scale_colour_manual(values = c("orange", "blue"), guide=F) + 
guides(size = guide_legend(override.aes = list(colour = list("orange","orange","orange","orange","blue","blue","blue","blue","blue","blue"),size=c(3,2.5,2,1,0.5,1,2,2.5,3,4)))) 

答えて

3

以下のコードを使用して作成された色のサイズと符号(値)は、ABS(値)を使用し続けます。

scale_size_continuous()の引数には、重複した改行が必要です(例:c(10,10,20,20、...))。次に、希望の値をlabels=に入力します。最後に、guides()override.aesを使用して、独自の値と色の順序を設定します。あなたはscalesライブラリから機能rescale()を使用することができguides()機能にsize=引数の正確な値を割り当てるには

ggplot(data=plot_dat, aes(x=x, y=y,colour=factor(sign(value)), size=abs(value))) + 
     geom_point() + 
     scale_color_manual(values=c("orange","blue"),guide=FALSE)+ 
     scale_size_continuous(breaks=c(10,10,20,20,30,30,40,40,50,50),labels=c(-50,-40,-30,-20,-10,10,20,30,40,50),range = c(1,5))+ 
     guides(size = guide_legend(override.aes = list(colour = list("orange","orange","orange","orange","orange","blue","blue","blue","blue","blue"), 
               size=c(4.92,4.14,3.50,2.56,1.78,1.78,2.56,3.50,4.14,4.92)))) 

。プロットしている値の範囲全体を、scale_size_continuous()にあるrange=引数に指定されたブレークポイントとともに再スケーリングします。

set.seed(1234) 
x=sample(seq(1,50),50,T) 
y=sample(seq(1,50),50,T) 
plot_dat=data.frame(x=x,y=y,value=rnorm(50,0,20)) 

library(scales) 
rescale(c(abs(plot_dat$value),10,20,30,40,50),to=c(1,5))[51:55] 
[1] 1.775906 2.562657 3.349409 4.136161 4.922912 

+0

おかげDidzis! rescale関数は素晴らしい追加です。 – zoneparser

関連する問題