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

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

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

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

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

Спасибо за ваши мысли...

4b9b3361

Ответ 1

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

Я не думаю, что создание презентаций Beamer само по себе несовместимо с воспроизводимыми исследованиями, но является законным результатом, вероятно, вместе с другими отчетами.

Но перед запуском в латекс, вы должны рассмотреть очень простой способ обхода только наложения графики и текста на каждый слайд. Это надежно соответствует изображению на слайде. Затем вы можете использовать аннотации в 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}

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