2012-12-31 13 views
6

1つのプロットで2つのガイド間のギャップをどのように減らすか。下の例では、2つのガイドは色とサイズの尺度から得たもので、タイトルの「サイズ」が1の凡例ポイントのすぐ下になるように、2つのガイドは2つの隙間を変更したいと考えています。この例では意味がありますが、実際のアプリケーションではそうです。1つのプロット内の2つの凡例間のギャップ(例えば、カラーとサイズの尺度)が小さい

df=data.frame(x=rnorm(100),y=rnorm(100),color=factor(rbinom(100,1,0.5)),size=runif(100)) 
ggplot(df,aes(x=x,y=y,color=color,size=size)) + geom_point() 

編集:ここにプロットがあります。ギャップを緑色の線で強調表示し、矢印を小さくしたい。

enter image description here

+0

あなたは、格子とggplot用語の両方で「スケール」と呼ばれているものについて話している、またはあなたが「伝説」に言及していますか? –

+0

私は、プロットの例では 'color'と 'size'と呼ばれるプロットを左のpfで伝えています。私は一緒にもっと近くに移動したいです。 – user2503795

+0

あなたは問題をよりよく定義しますが、重複は可能ですか? :/ http://stackoverflow.com/questions/11366964/is-there-a-way-to-change-the-spacing-between-legend-items-in-ggplot2 –

答えて

5

私はlegendまたはguideパラメータをカスタマイズするためにプレーしようとしたが、私は解決策を見つけることができません。私はggplot2の設定を使用して解決策を与えることを望む。

ここでは、gtableおよびgridパッケージに基づく2つのソリューションがあります。

gtableソリューションの場合、コードはこのquestionからインスピレーションを受けています。

gridパッケージを使用して

enter image description here

library(gtable) 
    # Data transformation 
    data <- ggplot_build(p) 
    gtable <- ggplot_gtable(data) 
    # Determining index of legends table 
    lbox <- which(sapply(gtable$grobs, paste) == "gtable[guide-box]") 
    # changing the space between the 2 legends: here -0.5 lines 
    guide <- gtable$grobs[[lbox]] 
    gtable$grobs[[lbox]]$heights <- unit.c(guide$heights[1:2], 
            unit(-.5,'lines'), ## you can the GAP here 
            guide$heights[4:5]) 
    # Plotting 
    grid.draw(gtable) 

同様の(私たちは伝説のビューポートに再描画)

pp <- grid.get('guide',grep=T) 
depth <- downViewport(pp$wrapvp$name) 
guide <- grid.get('guide',grep=T) 
grid.rect(gp=gpar(fill='white')) 
guide$heights <- unit.c(guide$heights[1:2],unit(-0.2,'lines'),guide$heights[4],unit(0.1,'lines')) 
grid.draw(guide) 
upViewport(depth) 
+0

ありがとう、私はそれを知っています。私の質問は、2つのガイド/サイズの2つの凡例とカラースケールをより近くに移動するオプションがあるかどうかです。 – user2503795

+0

@ user1318686あなたの最終的な結果を示すためにあなたの答えを写真に付けるとどうなりますか? – agstudy

+0

完了。ギャップを緑色の線で強調表示し、矢印を小さくしたい。 – user2503795

8

今では、テーマパラメータを使用して可能であるように思わ:

ggplot(df,aes(x=x,y=y,color=color,size=size)) + geom_point() + 
theme(legend.spacing.y = unit(-0.5, "cm")) 

凡例の余白を減らすこともできますS:

legend.margin = margin(-0.5,0,0,0, unit="cm") 

歳以上

legend.margin=unit(0, "cm") 
関連する問題