sweave и ggplot2: PDF-файлы вообще не создаются

Я пытаюсь создать отчет о перетаскивании, содержащий некоторую графику, сделанную с помощью ggplot2. Хотя я ищу какое-то окружение в долгосрочной перспективе — я просто использую здесь простой файл .Rnw, который содержит только код и сюжет.

 \documentclass[a4paper]{article}
 \SweaveOpts{echo=FALSE}
 \usepackage{a4wide}

  \begin{document}

  \begin{figure}[htbp]
  \begin{center}
 <<>>=
 library(ggplot2)
 x=rnorm(100)
 qplot(x)

 @
 \caption{My Graph}
 \end{center}
  \end{figure}
\end{document}

К сожалению, график не создается, я получаю только поврежденный файл .pdf и .eps. Хотя я получаю хороший файл .tex, который работает, за исключением графики. Я использую следующий базовый код для его создания:

 Sweave("myfile.Rnw")

Я только что нашел в Интернете несколько старых сообщений, в которых обсуждались проблемы с прозрачностью и sweave/ggplot2, но ничего, что могло бы помочь. Пробовал и расслабленный пакет, тоже не помогло. Кстати, есть ли какие-нибудь новости о пакете Decumar?


person Matt Bannert    schedule 21.07.2010    source источник
comment
Последние несколько дней Decumar находился в активной разработке и, возможно, приближается к моменту, когда его можно будет выпустить.   -  person hadley    schedule 22.07.2010
comment
Ура! Это делает мой день. Я действительно с нетерпением жду, чтобы проверить это!   -  person Matt Bannert    schedule 22.07.2010


Ответы (3)


qplot() производит объекты, а не графический вывод. Может показаться, что это так, когда вы запускаете его, но это потому, что без присваивания R автоматически печатает вывод qplot(). Чтобы интегрировать его в Sweave, либо оберните print() вокруг qplot(), либо назначьте вывод qplot() чему-то, а затем оберните это print().

...
<<fig = T, echo = F>>=
 library(ggplot2)
 x=rnorm(100)
 p <- qplot(x)
 print(p)
@
...

Это должно сработать. Я постоянно использую ggplot2 графику в своих документах.

person JoFrhwld    schedule 21.07.2010
comment
спасибо, чувак. начало всегда самое сложное... Никогда не думал об этом таким образом, потому что я просто использовал qplot() и ggsave после этого. - person Matt Bannert; 22.07.2010

Вы должны обернуть его вокруг print(), чтобы заставить его работать в переплетении.

person Maiasaura    schedule 22.07.2010

На самом деле, хотя оба предыдущих ответа верны, ваша проблема заключается в другом.

Вам необходимо убедиться, что весь блок кода находится в левой части страницы (кроме обозначения в функциях). Опять же, я понятия не имею, почему, но это вызывает проблемы для Sweave.

Убедившись, что весь код (и верхний/нижний колонтитул для фрагмента кода) находится в левой части страницы (и добавив оператор печати), ваш пример работает для меня.

Кстати, сегодня я узнал, что вы можете создать среду вокруг своего кода в документах swave (о чем я не знал, и это сэкономит мне много времени). Старый добрый stackoverflow, который учит вас чему-то новому, даже когда вы отвечаете на вопрос!

Надеюсь это поможет.

person richiemorrisroe    schedule 23.09.2011