2012-02-13 4 views
3

Я работаю над докладом R Sweave. И у меня возникают некоторые трудности с параметрами ggplot в выпуске sweave pdf. Мой код:R, Latex, Sweave, ggplot2 - изменить размеры ggplot

\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. на самом деле я хочу, чтобы высота была такой же, но сделайте ширину такой же, как ширина текста.

Спасибо за ваше время.

+0

Возможно, один из них поможет? http://stackoverflow.com/q/3367393, http://stackoverflow.com/q/4495528, http://stackoverflow.com/q/5258901 – Aaron

+0

Спасибо, я попробовал, но это не сработало для моего кода , Теперь я начинаю думать, что у меня какая-то ошибка в моей установке латекса. – jeroen81

+0

Что не сработало? См. Http://stackoverflow.com/questions/how-to-ask для других советов по улучшению вашего вопроса. – Aaron

ответ

1

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

Это то, что обычно делают пользователи Sweave: изобретать свои собственные функции или использовать другие трюки для написания кода LaTeX типа '\ includegraphics [width = ...] {}' в документе с опцией chunk 'results = tex'. Что делать, если этот кусок имеет другие типы вывода? например 'Печать (лм)'. Sweave действительно должен был добавить опции для контроля размеров графиков в выходе (я ждал и ждал, и, наконец, добавил сам: https://github.com/yihui/knitr#readme) –

+0

Knitr выглядит красиво. для моего следующего проекта я обязательно рассмотрю использование knitr. – jeroen81

6

Вы могли бы попробовать с использованием пакета 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() 
@ 
+1

Это не контролирует высоту, не так ли? С Sweave мы могли бы использовать '\ setkeys {Gin} {width = 0.9 \ textwidth}', но это относится ко всем цифрам, конечно. – chl

+0

вы можете использовать '\ SweaveOpts {out.width = 0.9 \ textwidth}', чтобы сделать это глобальным для всех фигур. – Ramnath

4

Большое спасибо, Рамнат. 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} 

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

Вы можете составить документ по:

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

вы также можете напрямую скомпилировать 'pdf', используя' knit2pdf'. – Ramnath

+0

Или используйте Rstudio, это также поддерживает компиляцию в pdf за один раз ... –

Смежные вопросы