循环内的自定义 R Markdown 图大小
custom R Markdown plot size within loop
我正在 R Markdown/knittr 文档中创建带状图。我希望绘图的垂直大小与条形图中的行数成正比。
编辑:最好的解决方案还允许交错表格和图表。参见 Interleaving tables and plots in R Markdown, within loop
在此示例中,配备“3 个化油器”的汽车的 MPG 图与配备“2 个化油器”的汽车的图高度相同,即使 2 个化油器的汽车有三种不同的档位配置并且只有一个用于 3 化油器汽车。
```{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) )
})
```
这是一个使用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)))
```
我正在 R Markdown/knittr 文档中创建带状图。我希望绘图的垂直大小与条形图中的行数成正比。
编辑:最好的解决方案还允许交错表格和图表。参见 Interleaving tables and plots in R Markdown, within loop
在此示例中,配备“3 个化油器”的汽车的 MPG 图与配备“2 个化油器”的汽车的图高度相同,即使 2 个化油器的汽车有三种不同的档位配置并且只有一个用于 3 化油器汽车。
```{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) )
})
```
这是一个使用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)))
```