Ответ 1
Вы можете, например, определить ширину в другом фрагменте, а затем использовать его
```{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)
```
В knitr можно указать размер графика, просто указав его в параметрах куска.
Например:
```{r, fig.width=9,fig.height=3}
plot(x)
```
Я хотел бы иметь возможность динамически изменять высоту и ширину фигуры на основе переменных в x
. Скажем, что x - это data.frame:
x <- data.frame(x=factor(letters[1:3]),y=rnorm(3))
Например, сакэ говорит, что я хотел бы настроить fig.height равным length(unique(x$x))
Вы можете, например, определить ширину в другом фрагменте, а затем использовать его
```{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)
```
Обходной путь этой проблемы, особенно если вы хотите изменить параметр фигуры в цикле,
Отдельно определите детали фигуры в следующих фрагментах
```{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)
```
Я только что нашел замечательное сообщение в блоге об этом.
Подробнее в блоге Майкла Дж. Уильямса - я бесстыдно похитил код, поэтому более подробно там. Не забудьте установить параметры пакета для результатов = "asis".
Предположим, вы хотите вывести кучу графиков, используя цикл, но вы хотите, чтобы каждый из них имел разные размеры. Определите следующую функцию (опять же, я просто скопирую здесь):
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))
}
И используйте такую функцию, определяя ваши собственные размеры фигур:
```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
subchunkify(g, 10, 3)
subchunkify(g, 7, 7)
```
Или пусть данные определяют размеры:
```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
for (i in seq(2, 5)) {
subchunkify(g, i / 2, i)
}
```
В сообщении Майкл предупреждает, что вы должны быть осторожны:
Поскольку мы использовали результаты = 'asis', если мы хотим вывести текст или заголовки или что-нибудь еще из куска, мы должны использовать необработанный HTML, а не Markdown, и мы должны использовать cat() для этого, а не для печати (). Например:
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
cat('<h2>A Small Square Plot</h2>')
subchunkify(g, 3, 3)
Опять же, не моя работа... перейдите к этому прекрасное сообщение в блоге для получения более подробной информации. Надеюсь, это сработает для вас.