ggplot2 и sweave - сюжет в Rplots вместо основного pdf? - PullRequest
2 голосов
/ 13 октября 2011

Я следил за примерами на похожих постах, но безрезультатно. Вот пример проблемы, которую я вижу.

Сохранено в tmp.Rnw:

\documentclass[10pt]{article}
\title{Reproducible Example} 
\begin{document}
\maketitle
\begin{center}

<<echo=FALSE,results=hide>>=
library(ggplot2)
plot.to.print  = qplot( 1:10, 1:10 ) 
@ 

\section{No Figure Below This Section Title}
<<<fig=true>>=
print( plot.to.print )
@ 

\end{center}
\end{document}

В tmp.co.r я поставил следующий код:

Sweave("tmp.Rnw",stylepath=T)

И я создаю текстовый файл так:

/../../2.12.1/bin/R --no-save < tmp.co.r

и затем используйте pdflatex для файла tmp.tex, который выходит.

Результатом является tmp.pdf, который содержит заголовок, название раздела и код R, но без рисунка. Тем не менее, также создается файл Rplots.pdf, который содержит нужный мне рисунок в tmp.pdf.

Я уверен, что совершаю ошибку новичка, но не могу ее найти. Любые советы?

Ответы [ 3 ]

2 голосов
/ 13 октября 2011

Попробуйте это

<< label = figPlot1, include = FALSE >>=
plot.to.print  = qplot( 1:10, 1:10 ) 
print(plot.to.print)
@ 


\begin{figure}
\begin{center}
<< label = fig1, fig = TRUE, echo = FALSE >>=
<<figPlot1>>
@
\end{center}
\caption{Your Caption}
\label{fig:figPlot1}
\end{figure}
1 голос
/ 13 октября 2011

Проблема в том, что ваш лишний < в вашем фиговом куске.

Это заставляет его выглядеть как <fig=TRUE, так что fig на самом деле не установлено в TRUE должным образом.Вы заметите, что в вашем .tex файле тоже нет нужных includegraphics строк.

Почему вы получаете Rplots.pdf немного сложно, но о нем стоит знать.Во-первых, каждый блок, который создает графику, выполняется дополнительное время для каждого желаемого графического типа.Так что, если вы просто создадите PDF-файл (я думаю, по умолчанию), он будет запущен дважды;если вы создадите PDF и EPS, он будет запущен три раза.При первом запуске он запускается без открытия графического устройства;Я на самом деле не уверен, почему это работает в то время, но это так.Для нескольких файлов необходимо запускать его отдельно, каждый из которых открывается по очереди.

Таким образом, рекомендуется делать то, что вы делали, и запускать весь код, создающий фигуру, в одном фрагменте и просто изобразить фигуру вкусок с fig=TRUE;это минимизирует код, который запускается несколько раз.Однако, будьте осторожны, если вы используете случайные числа или что-то увеличиваете в fig=TRUE чанках;поскольку он запускается несколько раз, его поведение, вероятно, будет не таким, как вы ожидаете.

Во-вторых, когда код, создающий графику, запускается без указания графического устройства, графический тип по умолчанию открывается в любом случае, чтобы код работална.Когда вы работаете в интерактивном режиме, всплывающие окна с картинками.При неинтерактивном запуске по умолчанию обычно открывается файл PDF, а по умолчанию используется имя Rplots.pdf.Поскольку это происходит со всеми фрагментами, которые создают фигуры, этот файл в конечном итоге является многостраничным pdf со всеми фигурами, которые вы в нем создали.

Наконец, методы, которые создают фигуру с использованием кода R вместо fig=TRUEмеханизм иногда может быть предпочтительным, чтобы код запускался только один раз;обычно это немного больше бухгалтерии, хотя это можно минимизировать, создавая функции, которые помогут.Очевидно, что пакет AFLP (см. Ответ Тьерри) имеет такие функции, хотя я никогда не использовал его.Совсем не сложно написать свой собственный, хотя, если хотите, похоже на то, что рекомендуется в Sweave FAQ A.9 для создания нескольких графиков одновременно.

Наконец (peersв хрустальный шар ...), я вижу, что вы используете Emacs в режиме Rnw, где при наборе < вы получите <<>>= с курсором в центре, поэтому при наборе << вы получите <<<>>=.

1 голос
/ 13 октября 2011

Посмотрите на функцию ggsave.latex () из пакета AFLP, который доступен в R-Forge

install.packages("AFLP", repos="http://R-Forge.R-project.org")

Тогда ваш файл Sweave упрощается до этого

\documentclass[10pt]{article}
\title{Reproducible Example} 
\begin{document}
\maketitle

<<echo=FALSE,results=hide>>=
library(ggplot2)
#just imports the function you need without loading the entire package
ggsave.latex <- AFLP:::ggsave.latex 

plot.to.print  = qplot( 1:10, 1:10 ) 
@ 

\section{No Figure Below This Section Title}
<<result = tex>>=
ggsave.latex(plot.to.print, caption = "Your caption", label = "ThisIsTheLabel")
@ 
\end{document}

Обратите внимание, что ggsave.latex установит окружение фигуры для вас.И это позволяет создавать несколько фигур и / или других выходных данных LaTeX в одном фрагменте.

...