问题
I wanted to generate two images of different sizes, but show them side-by-side. Is this possible?
This works, but then they have to be the same size:
```{r two_plots_same_size_side_by_side, fig.width=5, fig.height=5}
plot(...)
plot(...)
```
This doesn't work, but it could since in Markdown, lines that are separated by a single newline, appear on the same line.
```{r normal_plot, fig.width=5, fig.height=5}
plot(...)
```
```{r tall_plot, fig.width=5, fig.height=9}
plot(...)
```
回答1:
Another option, if you're outputting to HTML is to use the out.extra=
chunk option, and set them to be float objects within a block. For example.
```{r fig.width=4, fig.height=6,echo=FALSE,out.extra='style="float:left"'}
plot(cars)
```{r fig.width=8, fig.height=6,echo=FALSE, out.extra='style="float:left"'}
plot(cars)
```
回答2:
One option would be to make a single wide graph with the R commands and give knitr
just the one graph to deal with, maybe something like:
```{r fig.width=10, fig.height=9}
layout( cbind( c(0,0,1,1,1,1,1,0,0), rep(2,9) ) )
plot(...)
plot(...)
```
回答3:
Yet another option is to use a vector for out.width
or out.height
, if you do not mind resizing the plots, e.g.
```{r out.width=c('500px', '300px'), fig.show='hold'}
boxplot(1:10)
plot(rnorm(10))
```
回答4:
You can also use grid.arrange from gridExtra which works with grob or ggplot objects
require(gridExtra)
pre_fig <- rasterGrob(readPNG("paper_figures/surf_0000.png"), interpolate=TRUE)
post_fig <- rasterGrob(readPNG("paper_figures/surf_0044.png"), interpolate=TRUE)
grid.arrange(pre_fig, post_fig, ncol=2)
来源:https://stackoverflow.com/questions/13996567/knitr-how-to-show-two-plots-of-different-sizes-next-to-each-other