Подтвердить что ты не робот

Субфигуры или субтитры с ножом?

Можно ли создавать субфигуры (с соответствующими подписями) с использованием knitr? Вот минимальный рабочий пример:

\documentclass{article}

\begin{document}

<<echo = FALSE, fig.cap = c("Some numbers.", "Some more numbers."), out.width = "0.5\\textwidth", fig.align = "center">>=

plot(1:10)
plot(30:100)

@

\end{document}

Это приводит к двум цифрам, обозначенным на рисунке 1 и рисунке 2, с титрами, как определено (соответственно). Но я хочу, чтобы они были помечены как "Рисунок 1a" и "Рисунок 1b", как вы можете сделать с пакетом подкласса LaTeX.

Я знаю, что есть опция knitr "fig.env", но это не решает ее (по крайней мере, не используя, например, "fig.env = 'subfigure'" ). Здесь есть аналогичная статья о Sweave, но решение является неэффективным взломом: http://texblog.org/2011/12/01/sweave-subfig-controlling-figure-size-and-placement/

4b9b3361

Ответ 1

knitr ( >= v1.5) поддерживает субфигуры. Вы можете использовать опцию chunk fig.subcap. Вот минимальный пример.

\documentclass{article}
\usepackage{subfig}
\begin{document}

<<fig-sub, fig.cap='two plots', fig.subcap=c('one plot', 'the other one'), out.width='.49\\linewidth'>>=
plot(1:10)
plot(rnorm(10), pch=19)
@

\end{document}

subfigures in knitr

Ответ 2

Вы можете использовать пакет Latex subcaption.

\documentclass{article}
\usepackage{subcaption}

\begin{document}

\begin{figure}
\centering
\begin{subfigure}[b]{0.3\textwidth}
\centering
<<echo = FALSE, out.width = "0.5\\textwidth", fig.align = "center">>=
  plot(1:10)
@
\caption{text for first figure}
\label{fig:gull}
\end{subfigure}%

\begin{subfigure}[b]{0.3\textwidth}
\centering
<<echo = FALSE, out.width = "0.5\\textwidth", fig.align = "center">>=
  plot(30:100)
@
\caption{text for second figure}
\label{fig:tiger}
\end{subfigure}
\caption{Figure caption}
\end{figure}

\end{document}

enter image description here

Ответ 3

Обновление ответа от Yihui, чтобы отразить изменения в Rmarkdown за последние несколько лет, а также переход от файлов Rnw.

Как указано в параметре knitr chunk options, для подфигуров требуется несколько дополнительных настроек, которые должны быть установлены в заголовке блока:

  • fig.subcap - список подтипов для подфигуров
  • fig.ncol: количество столбцов подфигуров
  • out.width: ширина выходных данных. Обычно вы устанавливаете этот 100%, деленный на количество подколок.

Субфигуры также требуют пакет LaTeX subfig. Поэтому строка \usepackage{subfig} должна быть включена в YAML, или если вы используете внешний шаблон tex, вы можете добавить это в этот файл.

Вот базовый шаблон:

---
output: pdf_document
header-includes:
   - \usepackage{subfig}
---  

```{r fig-sub, fig.cap='two plots', fig.subcap=c('one plot', 'the other one'), out.width='.49\\linewidth', fig.asp=1, fig.ncol = 2}
plot(1:10)
plot(rnorm(10), pch=19)
```

введите описание изображения здесь

Использование с ggplot2

Если вы рисуете субфигуры, которые содержат несколько графиков ggplot, могут быть беспорядочными, поскольку они не выстраиваются между графиками. Вы можете проверить этот пост здесь, как использовать cowplot, чтобы заставить ggplots иметь одинаковые размеры.

fooobar.com/info/175499/... поможет вам убедиться, что все графики выстроены так, как показано на рисунке ниже:

введите описание изображения здесь

Предоставление списка субфигурам

Просто поделитесь этим как возможным расширением подфигуров. Что-то, что я люблю использовать для них, кормит их списком цифр. Возможно, вы создали функцию, которую нужно запускать в четырех разных тестовых группах или в четырех разных местах. Например, вот список четырех городов в Великобритании:

```{r}
locations <- c("Southampton, UK", "London, UK", "Bristol, UK", "Birmingham, 
```

Этот список затем можно использовать в fig.sub и lapply для создания списка подфигуров. Если вам нужно запустить

```{r fig-sub-2, fig.cap='A collection of maps', fig.subcap= locations, out.width='.49\\linewidth', fig.asp=1, fig.ncol = 2}
library(ggmap)
lapply(locations, function(x) 
  ggmap(get_map(x))
  )
```

введите описание изображения здесь

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