2012-09-24 7 views
8

facet_gridまたはfacet_wrapgeom_rasterを併用しようとしています。しかし、各パネルでは、審美的には異なるスケールになっています(z)。例えば、同じ美学の複数の伝説

##Data at end of question 
ggplot(dd, aes(x,y)) + 
    geom_raster(aes(fill=z)) + 
    facet_grid(type ~ var) 

enter image description hereを与えます。

しかし、CとDの平均値はそれぞれ0と100なので、我々は多くの分解能を失います。また、試みることができる:

##Change C to D to get other panel 
ggplot(subset(dd, var=="C"), aes(x,y))+ 
    geom_raster(aes(fill=z)) + 
    facet_grid(type ~ var) + 
    theme(legend.position="bottom") 

enter image description here

enter image description here

を与えるが、私は今、2つのYストリップを持っています。

質問

  1. 私はfill美的ための2つの伝説を与えるために最初のプロットを変更することはできますか?
  2. 2つの別々のグラフを作成すると、いずれかのプロット上のyストリップを削除して、一緒に押し込むことができますか?テーマを混乱させると、これは不可能です。

データ

データはこれについて何

dd = expand.grid(x=1:10, y=1:10) 
dd = data.frame(dd, type=rep(LETTERS[1:2], each=100), 
      var =rep(c("C", "D"), each=200)) 
dd$z = rnorm(400, rep(c(0, 100), each=200)) 

答えて

7

グラフを再現する:また

enter image description here

library(gridExtra) 
p1 <- ggplot(subset(dd, var=="C"), aes(x,y))+ 
    geom_raster(aes(fill=z)) + facet_grid(type ~ var) + 
    theme(legend.position="bottom", plot.margin = unit(c(1,-1,1,0.2), "line")) 
p2 <- ggplot(subset(dd, var=="D"), aes(x,y))+ 
    geom_raster(aes(fill=z)) + facet_grid(type ~ var) + 
    theme(legend.position="bottom", plot.margin = unit(c(1,1,1,-0.8), "line"), 
     axis.text.y = element_blank(), axis.ticks.y = element_blank()) + ylab("") 
grid.arrange(arrangeGrob(p1, p2, nrow = 1)) 

あなたのかもしれませんplot.marginで遊びたいそして、あなたの最初の質問に対する否定的な答えはhereであると思われます。

+0

ありがとうございました。 'plot.margin'を使って遊んでみると、両方のプロットを同じサイズにすることができますか?ちょうど今、左側のプロット領域は右側のプロット領域よりも小さくなります。 – csgillespie

+0

@csgillespie、そうだと思いますが、私は答えを編集しました。 – Julius

+0

ありがとうございます。それは私が思いついた解決策とほぼ同じです** **しかし、私は画面の横からパネルラベルをシフトすることは考えていませんでした。解決策は少しハッキリですが、私はそれが最善の解決策だと思っています。 BTWは '+ ylab(NULL)'を使ってもy軸のラベルを表示しないので、少し楽になるかもしれません。ありがとう。 – csgillespie

関連する問題