yihui tutorial opts_chunk name font examples asp r knitr

tutorial - Altura y anchura dinámicas para parcelas knitr.



knitr::opts_chunk (3)

Acabo de encontrar una gran entrada de blog sobre esto.

Lea más en el blog de Michael J Williams . He robado descaradamente el código, así que más detalles allí. Recuerde configurar las opciones de chunk en results = "asis".

Supongamos que desea generar un montón de gráficos utilizando un bucle, pero desea que cada uno tenga diferentes tamaños. Defina la siguiente función (de nuevo, solo estoy copiando y pegando aquí ):

subchunkify <- function(g, fig_height=7, fig_width=5) { g_deparsed <- paste0(deparse( function() {g} ), collapse = '''') sub_chunk <- paste0(" `","``{r sub_chunk_", floor(runif(1) * 10000), ", fig.height=", fig_height, ", fig.width=", fig_width, ", echo=FALSE}", "/n(", g_deparsed , ")()", "/n`","`` ") cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE)) }

Y usa la función como esta, definiendo tus propios tamaños de figura:

```{r echo=FALSE, results=''asis''} g <- ggplot(economics, aes(date, unemploy)) + geom_line() subchunkify(g, 10, 3) subchunkify(g, 7, 7) ```

O dejar que los datos definan los tamaños:

```{r echo=FALSE, results=''asis''} g <- ggplot(economics, aes(date, unemploy)) + geom_line() for (i in seq(2, 5)) { subchunkify(g, i / 2, i) } ```

En el post Michael advierte que hay que tener cuidado:

Ya que estamos usando results = ''asis'', si queremos generar texto o encabezados o cualquier otra cosa del fragmento, debemos usar HTML sin formato, no Markdown, y debemos usar cat () para hacer esto, no imprimir () . Por ejemplo:

g <- ggplot(economics, aes(date, unemploy)) + geom_line() cat(''<h2>A Small Square Plot</h2>'') subchunkify(g, 3, 3)

Una vez más, no es mi trabajo ... dirígete a esa encantadora publicación de blog para obtener más detalles. Espero que esto funcione para usted.

En knitr, uno puede especificar el tamaño de la trama simplemente especificándolo en las opciones de trozo.

Por ejemplo:

```{r, fig.width=9,fig.height=3} plot(x) ```

Me gustaría poder ajustar dinámicamente la altura y el ancho de la figura sobre la base de las variables en x . Digamos que x es un data.frame:

x <- data.frame(x=factor(letters[1:3]),y=rnorm(3))

Por ejemplo, digamos que me gustaría ajustar fig.height para que sea igual a la length(unique(x$x))


Puedes, por ejemplo, definir el ancho en otro trozo, luego usarlo

```{r,echo=FALSE} x <- data.frame(x=factor(letters[1:3]),y=rnorm(3)) len = length(unique(x$x)) ``` ```{r fig.width=len, fig.height=6} plot(cars) ```


Una solución a este problema, especialmente si desea cambiar el parámetro de figura dentro de un bucle,

  1. Definir otro fragmento, una función que ejecuta el bucle.
  2. Defina por separado los detalles de la figura en los siguientes trozos

    ```{r, echo=FALSE} testFunction <- function (parameter) { x <- data.frame(x=c(1:parameter), y=rnorm(parameter)) g1 <- ggplot(data=x, aes(x=x, y=y)) + geom_point() print(g1) } ``` ```{r fig.width=10, fig.height=6} testFunction(10) ``` ```{r fig.width=5, fig.height=4} testFunction(4) ```