2012-12-21 17 views
8

Chciałem wygenerować dwa obrazy o różnych rozmiarach, ale pokazywać je obok siebie. czy to możliwe?knitr: Jak wyświetlić dwie działki o różnych rozmiarach obok siebie?

To działa, ale wtedy muszą mieć taki sam rozmiar:

```{r two_plots_same_size_side_by_side, fig.width=5, fig.height=5} 
    plot(...) 
    plot(...) 
``` 

ten nie działa, ale może to ponieważ w promocji cenowych, linie, które są rozdzielone przez pojedynczą linią, pojawiają się takie same linia.

```{r normal_plot, fig.width=5, fig.height=5} 
    plot(...) 
``` 
```{r tall_plot, fig.width=5, fig.height=9} 
    plot(...) 
``` 

Odpowiedz

6

Inną opcją, jeśli jesteś wyjście do HTML polega na użyciu opcji porcji out.extra= i ustawieniu ich jako obiektów pływających w bloku. Na przykład.

```{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) 
``` 
+1

To całkiem fajne. Po drugim wątku dodam tylko

na wypadek, gdyby był jakiś tekst. Dzięki – nachocab

+0

Jeśli masz możliwość włączenia nieprzetworzonego HTML, lepiej będzie umieścić je w kontenerze 'disply: block;'. –

9

Jednym rozwiązaniem byłoby zrobić jeden duży wykres z poleceń R i dać knitr tylko jeden wykres do czynienia, może coś takiego:

```{r fig.width=10, fig.height=9} 
layout(cbind(c(0,0,1,1,1,1,1,0,0), rep(2,9))) 
plot(...) 
plot(...) 
``` 
5

Jeszcze innym rozwiązaniem jest użycie wektor dla out.width lub out.height, jeśli nie przeszkadza zmiana rozmiaru działek, na przykład

```{r out.width=c('500px', '300px'), fig.show='hold'} 
boxplot(1:10) 
plot(rnorm(10)) 
``` 
+0

To nie wydaje się działać, mam 4 wydruki jako dane wyjściowe. – nachocab

+0

@nachocab używasz najnowszej wersji knitr? –

+0

Nie byłem, dzięki. – nachocab

6

Można również użyć grid.arrange z gridExtra która współpracuje z Grob lub ggplot obiektów

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) 
Powiązane problemy