Как я могу включить сложные R-графики в документ LaTeX? - PullRequest
12 голосов
/ 24 января 2011

У меня проблема со следующим фрагментом кода:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{myscatterplot.pdf}
\end{document}

Где "myscatterplot.pdf" генерируется следующим кодом в R:

library(scatterplot3d)
pdf("myscatterplot.pdf")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

Проблема в том, что результирующий документ LaTeX при компиляции с texworks (pdfLatex + makeindex + bibtex) имеет оси графиков, но ни одна из точек на метках графика или осей (в данном случае это только сами оси 3D) ). R или LaTeX не выводят сообщения об ошибках или предупреждения. Я использую:

  • R 2.12.1 в Windows 7,
  • MiKTeX 2.8,
  • TeXworks
  • Adobe Reader 9 (не уверен, что это отношение ...)

Мне удалось использовать команду \ includegraphics, чтобы включить png-версию рисунка, и открыв файл «myscatterplot.pdf» с Adobe, вы увидите нужную мне фигуру в своем документе.

Я попытался использовать пакет tikz в качестве обходного пути, но кажется, что scatterplot3d генерирует так много информации, что результирующая фигура не может быть включена в латексный документ из-за объема памяти (ошибка (мой фактический график будет иметь 10000 + очки!).

У меня есть подозрение, что проблема связана со шрифтами в файле ".pdf", но я попытался изменить шрифты pdf, используя

pdf("changefont.pdf")
par(family = "Helvetica")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

с точно таким же результатом при использовании \ includegraphics (changefont.pdf).

Другая возможная проблема, которую я рассматриваю, заключается в том, что, возможно, вывод scatterplot3d на самом деле представляет собой несколько изображений, и \ includegraphics берет только первую цифру (оси) из файла PDF. В этом случае я все еще не уверен, как обойти это.

Я бы очень признателен за обходной путь, так как в конечном итоге я хотел бы сделать все это с помощью Sweave, и это заставляет меня горько смотреть на прекрасный выход пакета!

Заранее благодарим за ваши ответы.

Редактировать 1:

Итак, первая рекомендация состояла в том, чтобы использовать формат EPS вместо PDF. Это дало некоторые результаты, но не то, что я хотел. Я запустил следующее:

\documentclass{article}
\usepackage{graphicx,epstopdf}
\begin{document}
\begin{figure}
\includegraphics[angle = 270, width= 6in, keepaspectratio=true]{change.eps}
\end{figure}
\end{document}

Я сгенерировал "change.eps", используя

postscript("change.eps")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

Это действительно дало улучшение (несмотря на то, что, как ни странно, оно поворачивало график на 90 градусов по часовой стрелке на выходе латекса!), И теперь у меня есть оси и точки из диаграммы рассеяния в мой латексный выход! Тем не менее, метки осей все еще не на рисунке, хотя я открыл "change.eps" с помощью ghostview, а оси находятся на графике! Кажется, способ, которым scatterplot3d выводит цифры, не согласуется с тем, как \ includegraphics ищет фигуры ...

Итак, я все еще ищу решение, которое будет включать метки осей.

Ответы [ 6 ]

5 голосов
/ 24 января 2011

Если посмотреть на файл myscatterplot.pdf, созданный с помощью перечисленных вами команд, оси и метки находятся там. Тем не менее, PDF довольно большой (7 х 7 дюймов).

Поможет ли вам играть с параметрами веса / роста в pdf ()?

pdf("myscatterplot.pdf", height=3.5, width=3.5)
4 голосов
/ 18 апреля 2011

Это примечание, касающееся того, что LaTeX превышает доступную память.

Я только что использовал ваш пример с tikzDevice для проведения стресс-тестов, и похоже, что результаты в значительной степени зависят от того, какой движок TeX используется.,Особо следует отметить luatex, преемника pdftex, который оказался способным обрабатывать графики со многими графическими элементами.

  • pdflatex:

    Сделано эточерез сюжет с 1000 очками, превысил память и умер на 10000.

  • xelatex:

    Также превысил память и умер на 10000 очков.

  • lualatex:

    Жевал 10000 точек за ~ 45 секунд и создал файл PDF размером 1 МБ.Пробежав 100,00 точек (входной файл 10 МБ) за ~ 7,5 минут, выплюнул 8,5 МБ PDF-файл и достиг пика при ~ 750 МБ использования памяти.Не пробовал тест на 1 миллион.

Похоже, pdftex и xetex выделяют всю свою память заранее, когда программа запускается, и это все, что они когда-либо получат,luatex, с другой стороны, похоже, что он может динамически распределять память и поэтому будет ограничен только объемом доступной оперативной памяти.

Так что, если pdflatex выдает ошибки «недостаточно памяти», попробуйтевзяв lualatex за спин!


Эти тесты были выполнены с использованием компиляторов TeX, включенных в дистрибутив TeX Live 2010.Я также являюсь одним из авторов tikzDevice

3 голосов
/ 24 января 2011

Вы можете попробовать Sweave: http://www.statistik.lmu.de/~leisch/Sweave/ (Sweave - это инструмент, который позволяет встроить код R для полного анализа данных в латексные документы)

1 голос
/ 11 сентября 2011

Я действительно пришел сюда с точно такой же проблемой (TexWorks, pdfLatex, Windows 7).И я обнаружил кое-что интересное: когда я впервые запустил Latex, фигуры появились с осями и все, а когда я перезапустил pdfLatex, оси снова исчезли.Это дало мне догадку, и я понял это: хотя предварительный просмотр латекса не показывает оси, формат PDF показывает.И вам даже не нужно указывать команде \includegraphics, что графика в формате PDF.

pdf("C:/Users/Orr/Documents/Leiden University/Master thesis/Chapters/Images/bioRes/Boxplots mouse raw data.pdf")
boxplot(mouse_data_raw,main="Mouse raw data")
dev.off()

\begin{figure}[t]
\includegraphics[scale=0.5]{mouse-box-raw}
\includegraphics[scale=0.5]{human-box-raw}
\end{figure}
1 голос
/ 24 января 2011

Я помню, как боролся с подобной проблемой.Не помню, смогу ли я увидеть надписи на рисунке.Оглядываясь назад на код, я вижу два параметра, которые я изменил на уровне R:

par(xpd=NA)
par(oma=c(3, 3, 0, 0))

также для postscript, чтобы не поворачивать графики на 90 градусов:

postscript(file="xx.eps", horizontal=FALSE)

HTH

1 голос
/ 24 января 2011

Если вы хотите вставить изображения PDF в ваш файл, я думаю, что вы должны использовать pdflatex вместо стандартного латекса. Если это не установлено, я бы попробовал сгенерировать цифры в формате eps из R вместо pdf.

...