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

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

\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) имеет оси графика, но ни одну из точек на графике или метках осей (в данном случае это просто сами трехмерные оси). 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 ищет цифры ...

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


person Rguy    schedule 24.01.2011    source источник
comment
Я знаю, что это не ответит на ваш вопрос, но на вашем месте я бы не включил график с 10.000+ точками в векторизованном формате, так как полученный PDF-файл был бы действительно огромным. Сохраните ваш сюжет в png с соответствующим разрешением (как и вы) и включите это изображение в свой документ.   -  person daroczig    schedule 24.01.2011
comment
Просто вы знаете: ваш исходный пример кода безупречно работает с Ubuntu 10.10 (R 2.12.1 Texlive 2009). Вы можете попробовать обновиться до Miktex 2.9 и посмотреть, поможет ли это.   -  person Matti Pastell    schedule 24.01.2011


Ответы (6)


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

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

pdf("myscatterplot.pdf", height=3.5, width=3.5)
person Karsten W.    schedule 24.01.2011
comment
@Rguy - Думаю, подсказка Карстена решит твою проблему. Я использую Win7 с MikTex2.9. Программа просмотра PDF-файлов TexWorks не отображает баллы. Acrobat Reader показывает точки, но размер графика по умолчанию слишком велик, а метки правой оси обрезаются. Изменение масштаба приводит к правильному отображению в Acrobat Reader. Я не думаю, что он когда-либо будет корректно отображаться в программе просмотра PDF-файлов TexWorks. - person Richard Herron; 24.01.2011
comment
@Rguy - Если вы в долгосрочной перспективе пользуетесь R и LaTeX (и, в конечном итоге, Sweave), я предлагаю проверить Emacs и ESS. Я думаю, что многие здесь используют эту настройку, и она может следовать за вами на любой платформе (Win, Mac, Linux). Думаю, как только ты переступишь порог, ты будешь по-настоящему счастлив. FWIW Я использую gVim 7.3 (у меня проблемы с ярлыками Emacs) с пакетом LaTeX, плагинами Vim R и SumatraPDF в качестве средства просмотра. SumatraPDF легок и поддерживает synctex, что может пригодиться. - person Richard Herron; 24.01.2011
comment
Исправление, указанное Карстеном, не сработало, но спасибо за предложение. Я решил эту проблему с помощью предложения @richardh о том, что PDF-файл не отображается правильно в программе просмотра PDF-файлов MikTex. Я не считал, что это может быть проблемой. Оказывается, он отлично отображается при открытии с помощью Adobe! Интересно, было ли это ошибкой в ​​программе просмотра MikTex, это довольно странная проблема, что MikTex может генерировать правильный график, но не отображать его. - person Rguy; 24.01.2011

Это дополнительное примечание, связанное с превышением LaTeX доступной памяти.

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

  • pdflatex:

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

  • xelatex:

    Тоже перевалил за память и умер на 10 000 баллов.

  • lualatex:

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

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

Итак, если pdflatex выдает ошибки "нехватки памяти", попробуйте проверить lualatex!


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

person Sharpie    schedule 18.04.2011

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

person Damodharan R    schedule 24.01.2011
comment
Хорошее введение в Sweave и здесь: r-bloggers.com/. - person Sacha Epskamp; 24.01.2011
comment
Вы также можете использовать пакет tikzDecive для хранения изображения в текстовом файле, который можно импортировать в документы LaTeX. - person Sacha Epskamp; 24.01.2011

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

person Tyler    schedule 24.01.2011
comment
Он говорит, что использует pdflatex, и проблема в том, что ярлыки отсутствуют. - person Alex; 24.01.2011
comment
Да, я использовал pdflatex. Я обновил сообщение с результатами вашего предложения (был некоторый успех, но не то, что я еще искал ...) - person Rguy; 24.01.2011
comment
Извините, уже поздно, и я упустил из виду этот довольно важный момент. - person Tyler; 24.01.2011

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

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

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

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

HTH

person VitoshKa    schedule 24.01.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}
person Hollander    schedule 11.09.2011