Как включить сложные 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) имеет оси графика, но ни одна из точек на графике или метках осей(в этом случае это только сами 3D-оси). Нет ошибок или предупреждающих сообщений, выводимых R или LaTeX. Я использование:

  • R 2.12.1 в Windows 7,
  • программы 2.8,
  • texworks выступает
  • Adobe Reader 9 (не уверен, что это соответствующий...)

я смог использовать команду includegraphics для включения png-версии рисунка и открытия "myscatterplot.pdf " с adobe показывает фигуру, которую я хочу в своем документе.

Я попытался использовать пакет tikz в качестве обходного пути, но, похоже, есть так много информации генерируется scatterplot3d, что результирующая фигура не может быть включена в документ latex из-за размера памяти (ошибка (мой фактический график будет иметь 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, и это делает меня горьким по отношению к прекрасному выходу пакета!

заранее спасибо за ваши ответы.

Edit 1:

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

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

Я автоматически "меняется.eps " использование

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

этой сделал дайте улучшение (несмотря на то, что он, как ни странно, повернул график на 90 градусов по часовой стрелке в выходе latex!), и теперь у меня есть оси и точки из scatterplot в моем выходе latex! Однако метки оси по-прежнему не на фигуре, хотя я и открыл " change.eps " с помощью ghostview, а оси находятся в сюжете! Похоже, что выходы scatterplot3d не согласуются с тем, как includegraphics ищет цифры...

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

6 ответов


глядя на myscatterplot.pdf как сгенерированный с командами, которые вы перечислили, оси и метки есть. Однако pdf довольно большой (7in x 7in).

помогает ли это, если вы играете с параметрами веса / высоты в pdf ()?

pdf("myscatterplot.pdf", height=3.5, width=3.5)

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

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

  • pdflatex:

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

  • xelatex:

    также превысил память и умер в 10,000 точках.

  • lualatex:

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

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

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


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


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


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


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

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

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

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

HTH


Я на самом деле пришел сюда с той же проблемой (TexWorks, pdfLatex, Windows 7). И я нашел кое-что интересное: когда я впервые запустил Latex, появились фигуры с топорами и все такое, а когда я снова запустил pdfLatex, топоры снова исчезли. Это дало мне предчувствие, и я понял: хотя предварительный просмотр latex не показывает оси, формат PDF делает. И вам даже не нужно говорить что графика в формате 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}