2016-09-29 10 views
0

R Markdown/knittrドキュメント内にストリッププロットを作成しています。私は、プロットの垂直方向のサイズが、ストリッププロットの行数に比例するようにします。カスタムRループ内のマークダウンプロットサイズ

編集:最適なソリューションは、テーブルとプロットのインターリーブも可能にします。この例ではInterleaving tables and plots in R Markdown, within loop

を参照して、「3つのキャブレター」と自動車用MPGためのプロットは、2キャブレター車のための3つの異なるギア構成があるにもかかわらず、「2つのキャブレター」と車のプロットと同じ高さであります3キャブレターの車には1つしかありません。ここで

enter image description here

enter image description here

```{r cars, echo=FALSE} 
library(ggplot2) 

carb.possibilities <- sort(unique(as.character(mtcars$carb))) 

filtereds <- lapply(carb.possibilities, function(carb.ct) { 
    return(mtcars[ mtcars$carb == carb.ct , ]) 
}) 

carb.possibilities <- paste(carb.possibilities, ' Carburetors', sep = '') 

names(filtereds) <- carb.possibilities 

lapply(carb.possibilities, function(one.possibility) { 

    current.possibility <- filtereds[[one.possibility]] 

    ggplot(current.possibility, aes(factor(gear), mpg)) + 
    coord_flip() + 
    labs(x = "Gears", title = one.possibility) + 
    geom_point(position=position_jitter(width = 0.1, height = 0.1)) 
}) 
``` 

答えて

1

grid.arrangeに

```{r cars, echo=FALSE, fig.height=30} 
library(ggplot2); library(gridExtra) 

carb.possibilities <- sort(unique(as.character(mtcars$carb))) 

filtereds <- lapply(carb.possibilities, function(carb.ct) { 
    return(mtcars[ mtcars$carb == carb.ct , ]) 
}) 

carb.possibilities <- paste(carb.possibilities, ' Carburetors', sep = '') 

names(filtereds) <- carb.possibilities 
p <- list() 
k <- 1 
heights <- c() 
for(one.possibility in carb.possibilities){ 
    current.possibility <- filtereds[[one.possibility]] 
    heights[k] <- length(unique(current.possibility$gear)) 
    p[[k]] <- ggplot(current.possibility, aes(factor(gear), mpg)) + 
    coord_flip() + 
    labs(x = "Gears", title = one.possibility) + 
    geom_point(position=position_jitter(width = 0.1, height = 0.1)) 
    k <- k + 1 
} 

do.call(grid.arrange, c(p, list(ncol = 1, heights= heights))) 

``` 
+0

感謝を使用したソリューションですが、私は明日それを試してみましょう。たぶん私は、各プロットの間にテキストや表を挿入することを計画していると言っていたはずです。あなたはあなたのソリューションと互換性がありますサンクですか? –

+0

はい... height引数を指定してgrid.arrangeを使用してください。 grid.arrange(p [[1]]、高さ=高さ[1])。また、grid.arrange(p [1:2]、height = height [1:2])のような複数のプロットを行うことができます。 –

+0

比例的な高さの点では、このソリューションは完璧です。プロットの数はレポートごとに一定ではないので、私はフィギュアの高さを '(fig.height = length(unique.character(mtcars $ carb)as)*))'に比例させました。私はテキストをインタリーブするという私の主張に対するあなたの応答を理解しているとは思えません。ループに 'print(one.possibility)'を追加すると、すべてのprint文が一番上にまとめられますが、私の既存のコード。私は別の質問を投稿する必要があると思います。 –