R, Latex, Sweave, ggplot2-изменение размеров ggplot


В настоящее время я работаю над отчетом R Sweave. И у меня возникли некоторые трудности с размерами ggplot в выводе sweave pdf. Мой код:

documentclass{report}

begin{document}

demo demo demo demo demo demo demo demo demo demo demo demo 

begin{figure}[h]
 begin{center}
<<echo=FALSE, fig=TRUE>>=
require(ggplot2)
df <- data.frame(a= c(1:10), b = c (10:1))

ggplot(data = df, aes(a, b)) + geom_line()
@
  caption{caption}
 end{center}
end{figure}

demo demo demo demo demo demo demo demo demo demo demo demo 

end{document}

Теперь я хочу управлять размерами ширины и высоты графика в выводе pdf. на самом деле я хочу сохранить высоту такой же, но сделать ширину такой же, как ширина текста.

Спасибо, что уделили мне время.
3 4

3 ответа:

Взгляните на ggsave.функция latex () из пакета AFLP, доступного на R-Forge

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

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

\documentclass{report}

\begin{document}

demo demo demo demo demo demo demo demo demo demo demo demo 

<<echo=FALSE, results = tex>>=
require(ggplot2)
ggsave.latex <- AFLP:::ggsave.latex
df <- data.frame(a= c(1:10), b = c (10:1))
p <- ggplot(data = df, aes(a, b)) + geom_line()
ggsave.latex(p, filename = "myplot.pdf", width = 2, height = 10, caption = "Your caption")
@

demo demo demo demo demo demo demo demo demo demo demo demo 

\end{document}

Вы можете попробовать использовать knitr пакет. (Полное раскрытие: я являюсь незначительным вкладчиком в кодовую базу этого пакета), что позволяет указать out.width, который управляет шириной рисунка. Таким образом, вы можете переписать свой фрагмент кода как

<<echo=FALSE, out.width = '0.9\\textwidth'>>=
suppressMessages(require(ggplot2))
df <- data.frame(a= c(1:10), b = c (10:1))
ggplot(data = df, aes(a, b)) + geom_line()
@

Большое спасибо, Рамнат. FWIW, я вставляю полный код сюда:

\documentclass{report}

\begin{document}

demo demo demo demo demo demo demo demo demo demo demo demo 

\begin{figure}[h]
<<echo=FALSE, fig.align='center', out.width='0.9\\textwidth', message=FALSE>>=
require(ggplot2)
df <- data.frame(a= c(1:10), b = c (10:1))
ggplot(data = df, aes(a, b)) + geom_line()
@
  \caption{caption}
\end{figure}

demo demo demo demo demo demo demo demo demo demo demo demo 

\end{document}

Я добавил опции fig.align='center' для центрирования рисунка (вам не нужно использовать \begin{center} и \end{center} в LaTeX, которые иногда могут центрировать неожиданные вещи в документе), и message=FALSE для подавления сообщений из require(ggplot2).

Вы можете скомпилировать документ следующим образом:

library(knitr)
knit('your_document.Rnw')