2017-08-25 10 views
1

questionslotsがループを使用してグリッドに配置する方法について説明します。しかし、私は後になったものをまとめることはできません。ループ内の空白を含むggplotファセットパネルを埋める

ループ内に任意の数の同じ大きさのグラフをプロットする必要があります。重要なのは、私はfacet_wrapを使用して、データをグループに分割しておく(以下の理由を説明します)。次に例を示します。

p[[6]]

enter image description here

を希望

df <- mtcars 
df$car <- rownames(df) 

ucar <- unique(df$car) 

# Split data into groups of n (6's here) 
split6s <- split(ucar, ceiling(seq_along(ucar)/6)) 

p <- list() 

# For each group of 6, plot something (mpg vs wt) faceted by group (car) 
for(i in 1 :length(split6s)){ 
    # Subset for group 
    temp <- subset(df, car %in% split6s[[i]])  

    # Save plot forcing facet with 1 row 
    p[[i]] <- ggplot(temp, aes(mpg, wt)) + geom_point() + 
       facet_wrap(~car, nrow = 1) 
} 

p[[5]] 

enter image description here

p[[6]] 

enter image description here

私は、私はいくつかのサイズを標準化することができるようにこれをしたいですgr のaphsを使用しますが、個々のプロットを一緒に囲む代わりにファセットを使用します。

答えて

1

これがあなたが探している解決策であるかどうかはわかりません。

library(ggplot2) 
library(grid) 

df <- mtcars 
df$car <- rownames(df) 
ucar <- unique(df$car) 
split6s <- split(ucar, ceiling(seq_along(ucar)/6)) 

p <- list() 
for(i in 1 :length(split6s)){ 
    temp <- subset(df, car %in% split6s[[i]])  
    p[[i]] <- ggplot(temp, aes(mpg, wt)) + geom_point() + 
       facet_wrap(~car, nrow = 1) 
} 

g5 <- ggplotGrob(p[[5]]) 
g6 <- ggplotGrob(p[[6]]) 

# Delete left panels  
for (k in c(4:7, 16:19, 34:37)) { 
    g5$grobs[[k]] <- nullGrob() 
} 
# Copy Maserati and Volvo panels 
g5$grobs[[2]] <- g6$grobs[[2]] 
g5$grobs[[3]] <- g6$grobs[[3]] 
g5$grobs[[14]] <- g6$grobs[[6]] 
g5$grobs[[15]] <- g6$grobs[[7]] 
g5$grobs[[32]] <- g6$grobs[[12]] 
g5$grobs[[33]] <- g6$grobs[[13]] 
# Move left x-axis label 
g5$grobs[[39]]$children[[1]]$x <- unit(1/6, "npc") 

grid.draw(g5) 

enter image description here

+0

私はそれは私に素晴らしいスタートを与えると思います。私は数値で遊ぶ必要があるので、削除するパネルの数は自動的に分かります。実際のコードでは、最後のプロットのパネル数は自分のデータによって変わります。 – Pete900

関連する問題