Изображения оттолкнулись от слайдов в выводе бимера из R markdown



Я использую R markdown v2 для создания презентации beamer. Большинство моих слайдов содержат изображение, сгенерированное ggplot, иногда с пояснительным текстом над этим слайдом. Я обнаружил, что мне действительно нужно индивидуально настроить размер каждого элемента (например, изображения, текста и т. д.) На каждом слайде, чтобы гарантировать, что изображение не будет отталкиваться от конца слайда.



Это в конечном итоге становится очень трудоемким, и своего рода поражает одну из заявленных целей R markdown: то есть быть быстрым способ выплюнуть воспроизводимое исследование.



Мне было интересно, есть ли какие-либо способы, чтобы различные элементы разумно авторазмерялись? Даже если это не выглядит здорово, по крайней мере, вещи не будут отталкиваться от конца? Или, если нет, возможно, есть другие методы, которые люди используют, чтобы убедиться, что вещи просто подходят, которые не занимают слишком много времени.



Заранее спасибо за ваши мысли...

579   1  

1 ответ:

Это сложная проблема, потому что набирать текст сложно. Rmarkdown хорошо скрывает множество сложных деталей, но если вы хотите набирать текст, вам нужно набирать текст. Это даже в латексе трудно, как вы увидите. Есть так много движущихся частей, например подписи и легенды, рендеринга изображения, которое затем включается в промежуточный файл .tex, так что pandoc может сделать ваш .pdf. Полностью обобщаемое решение невозможно, не требуя большого количества вводимых данных (чего вы пытаетесь избежать в первое место).

Я не думаю, что создание презентаций Beamer само по себе несовместимо с воспроизводимыми исследованиями, но является законным результатом, вероятно, наряду с другими отчетами. Но перед запуском в Latex, вы должны рассмотреть очень простой обходной путь, только помещая графику и никакого текста на каждом слайде. Это надежно вписывается в изображение на слайде. Затем вы можете использовать аннотации в ggplot2 для добавления дополнительного текста. Вот что я бы сделал.

Следующий Rmarkdown использует сложный бит встроенного латекса, чтобы сделать более-менее то, что вы хотите. Он ограничивает изображение нижней половиной экрана (но это можно изменить, если вы узнаете больше о tikz...), но масштабирует изображение до оставшегося размера страницы по мере увеличения верхнего текстового блока. Он также, конечно, масштабирует все ваши легенды, но вы можете потенциально настроить их в ggplot2.

---
title: "Some beamer slides with figures"
author: Somebody
date: November 06, 2015
output:
  beamer_presentation:
    keep_tex: yes
header-includes:
- \usepackage{graphicx}
- \usepackage{tikzpagenodes}
- \usetikzlibrary{calc}
- \usepackage{caption}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, fig.path="figures/beamer-example/")

library(ggplot2)
```

```{r}
mtcars$gear <- factor(mtcars$gear,levels=c(3,4,5),
   labels=c("3gears","4gears","5gears"))
mtcars$am <- factor(mtcars$am,levels=c(0,1),
   labels=c("Automatic","Manual"))
mtcars$cyl <- factor(mtcars$cyl,levels=c(4,6,8),
   labels=c("4cyl","6cyl","8cyl"))
```
## A default plot

```{r mpg-plot}
qplot(mpg, data=mtcars, geom="density", fill=gear, alpha=I(.5),
   main="Distribution of Gas Milage", xlab="Miles Per Gallon",
   ylab="Density")
```

## test

  - some text which
  - fills vertical 
  - space

\begin{tikzpicture}[overlay,remember picture]
    % Caption
    \node [anchor=south west,outer sep=0pt,inner sep=0pt,text width=\textwidth] (caption) at (current page text area.south west) {%
    };
    % Image
    \path let \p0 = (0,0), \p1 = (caption.north) in
        node [inner sep=0pt,outer sep=0pt,anchor=south] at (\x1,\y1) {%
            \pgfmathsetmacro\imgheight{\y0-\y1-\abovecaptionskip}%
            \includegraphics[height=\imgheight pt,width=\textwidth,keepaspectratio]{figures/beamer-example/mpg-plot-1}%
    };
\end{tikzpicture}

## test2

  - some text which
  - fills vertical 
  - space
  - but squashes
  - the image badly

\begin{tikzpicture}[overlay,remember picture]
    % Caption
    \node [anchor=south west,outer sep=0pt,inner sep=0pt,text width=\textwidth] (caption) at (current page text area.south west) {%
    };
    % Image
    \path let \p0 = (0,0), \p1 = (caption.north) in
        node [inner sep=0pt,outer sep=0pt,anchor=south] at (\x1,\y1) {%
            \pgfmathsetmacro\imgheight{\y0-\y1-\abovecaptionskip}%
            \includegraphics[height=\imgheight pt,width=\textwidth,keepaspectratio]{figures/beamer-example/mpg-plot-1}%
    };
\end{tikzpicture}

## test3
\begin{tikzpicture}[overlay,remember picture]
    % Caption
    \node [anchor=south west,outer sep=0pt,inner sep=0pt,text width=\textwidth] (caption) at (current page text area.south west) {%
    };
    % Image
    \path let \p0 = (0,0), \p1 = (caption.north) in
        node [inner sep=0pt,outer sep=0pt,anchor=south] at (\x1,\y1) {%
            \pgfmathsetmacro\imgheight{\y0-\y1-\abovecaptionskip}%
            \includegraphics[height=\imgheight pt,width=\textwidth,keepaspectratio]{figures/beamer-example/mpg-plot-1}%
    };
\end{tikzpicture}

Вы можете прочитать некоторые кровавые детали в: https://tex.stackexchange.com/questions/14512/how-to-define-a-figure-size-so-that-it-consumes-the-rest-of-a-page

Comments

    Ничего не найдено.