2017-01-31 18 views
-2

私が(R)からデータセットを持っている:ggplot2 facet_wrap()4散布図

head(anscombe) 
    x1 x2 x3 x4 y1 y2 y3 y4 
1 10 10 10 8 8.04 9.14 7.46 6.58 
2 8 8 8 8 6.95 8.14 6.77 5.76 

そして今、私は(x1,y1)(x2,y2)の散布図をプロットしたいと思い、(x3,y3)とグリッド内(x4, y4)ggplot2を使用します。各サブプロットは、タイトル「1」、「2」、「3」、「4」をそれぞれ有するべきである。 par(mfrow=c(2,2))を使用した場合と似ているはずですが、facet_wrapのマニュアルを調べましたが、例はこの単純なケースをカバーしていないようです。 ggplot2でどうすれば実現できますか?

+0

回答のいずれかが、あなたのニーズを満たしていましたか?そうであれば、「同意してください」と答えてください。それ以外の場合は、あなたのニーズを拡大するために回答を編集することができます。 – r2evans

答えて

1

これはすべて必要なわけではありませんが、それは私のために働いた可能性があります。それが何をしているのかを見るには、行ごとに繰り返し、中間ステップを見てください。

library(dplyr) 
library(tidyr) 
library(ggplot2) 
mutate(df, i = row_number()) %>% 
    gather(key, val, -i) %>% 
    mutate(pane = gsub("[a-z]", "", key), 
     key = gsub("[^a-z]", "", key)) %>% 
    spread(key, val) %>% 
    ggplot(aes(x=x,y=y)) + 
    geom_point() + 
    facet_wrap(~pane) 

enter image description here

1

データセット数1-4をハードコーディングすることは許容可能である場合にはここでそれを行うための一つの方法は、です:

library(dplyr) 
library(ggplot2) 
data(anscombe) 

list(
    transmute(anscombe, x=x1, y=y1, dataset=1), 
    transmute(anscombe, x=x2, y=y2, dataset=2), 
    transmute(anscombe, x=x3, y=y3, dataset=3), 
    transmute(anscombe, x=x4, y=y4, dataset=4) 
) %>% 
bind_rows() %>% 
ggplot(aes(x, y)) + 
geom_point() + 
facet_wrap(~ dataset) 

主なものは、あなたがすべてのx座標を必要とするということです1つの変数の座標値(x1〜x4)、および別の変数のすべてのy座標(y1〜y4)が含まれます。

plot

1

あなたもfacet_wrapずに試みることができる:

library(ggplot2) 
library(gridExtra) 
grid.arrange(ggplot(df, aes(x1, y1))+geom_point(size=2), 
      ggplot(df, aes(x2, y2))+geom_point(size=2), 
      ggplot(df, aes(x3, y3))+geom_point(size=2), 
      ggplot(df, aes(x4, y4))+geom_point(size=2)) 

enter image description here