R, Latex, Sweave, ggplot2 - изменить размеры ggplot - PullRequest
4 голосов
/ 13 февраля 2012

Сейчас я работаю над отчетом 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 ]

6 голосов
/ 13 февраля 2012

Вы можете попробовать использовать пакет 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()
@
4 голосов
/ 13 февраля 2012

Большое спасибо, Рамнатх. 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')
1 голос
/ 13 февраля 2012

Посмотрите на функцию 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}
...