Rmarkdown / knitr настраивают фигуры разных размеров - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь добиться различной высоты и ширины для подфигур в Rmarkdown. Я надеялся, что простое обеспечение fig.height и fig.width вектором будет работать, так как, похоже, это работает для out.height и out.width

---
title: "Untitled"
output: pdf_document
header-includes:
   - \usepackage{subfig}
---



```{r, echo = FALSE, fig.height = c(1,2,3), fig.width=c(1,1,1), fig.cap='Caption', fig.subcap=c('Subcaption 1', 'Subcaption 2', 'Subcaption 3')}
library(ggplot2)
df <- data.frame(
  x = rnorm(30),
  y = rnorm(30)
)
p1 <- p2 <- p3 <- ggplot(df, aes(x, y)) +
  geom_point()

print(p1)

print(p2)

print(p3)
```

Однако результат таков

enter image description here

Итак, похоже, что все подфигуры используют значения fig.height = 3, fig.width = 1

Кто-нибудь знает, как указать эти значения для каждой подфигуры отдельно?

1 Ответ

0 голосов
/ 03 апреля 2020

Это на самом деле не «подфигуры», это просто цифры рядом друг с другом. Таким образом, вы можете получить то, что вы хотите, набрав:

```{r, echo = FALSE}
library(ggplot2)
df <- data.frame(
  x = rnorm(30),
  y = rnorm(30)
)
p1 <- p2 <- p3 <- ggplot(df, aes(x, y)) + geom_point()
```
```{r echo = FALSE, fig.height=1, fig.width=1}
print(p1)
```
```{r echo = FALSE, fig.height=2, fig.width=1}
print(p2)
```
```{r echo = FALSE, fig.height=3, fig.width=1}
print(p3)
```

Возможно, вы могли бы немного автоматизировать это, используя идеи из https://yihui.org/knitr/demo/reference/, но я не уверен, что оно того стоит беда. Другим многообещающим подходом было бы использование функции gridExtra::grid.arrange, хотя я не уверен, разрешит ли она макет, который вы хотите.

EDITED TO ADD после комментария, указывающего, что требуются истинные подфигуры LaTeX:

Это сложнее, потому что, как вы видели, fig.height не обрабатывается отдельно для каждой подфигуры. Я думаю, что вы можете получить желаемую высоту, добавив дополнительные поля. Чтобы получить полный контроль над вертикальным центрированием, необходимо отключить обрезку фигур с помощью параметра YAML

output: 
  pdf_document:
    fig_crop: FALSE

. При использовании этого параметра этот код

```{r, echo = FALSE, fig.height=3, fig.width=1,fig.subcap=c("first", "second", "third"),fig.cap="Main"}
library(ggplot2)
df <- data.frame(
  x = rnorm(30),
  y = rnorm(30)
)
p1 <- p2 <- p3 <- ggplot(df, aes(x, y)) + geom_point()
p1 + theme(plot.margin = margin(t = 1, b = 1, unit = "in") + theme_get()$plot.margin)
p2 + theme(plot.margin = margin(t = 1/2, b = 1/2, unit = "in") + theme_get()$plot.margin)
p3
```

дает следующий вывод:

screenshot

...