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

Я пытаюсь создать отчет sweave, содержащий некоторую графику, выполненную с помощью 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?

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Собственно, хотя оба предыдущих ответа верны, ваша проблема - это что-то еще.

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

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

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

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