Числа на рисунках, сгенерированные Sweave / R и почему только (PDF) LaTeX - PullRequest
2 голосов
/ 01 декабря 2011

Я продолжаю свой предыдущий пост здесь:

Вопросы начинающего (цифры, библиография) с Sweave / R / LaTeX --- мой первый документ

Рабочийкод воспроизводится здесь:

\documentclass[a4paper]{article}
\usepackage{Sweave}  %%%%%%
\begin{document}
<<echo=TRUE>>=
x <- rnorm(100)
xm <- mean(x)
xm
@

<<echo=FALSE>>=
x <- rnorm(100)
xm <- mean(x)
xm
@

<<echo=TRUE>>= 
##### Remove all comments from your data file 
test.frame<-read.table(file="apples.d",header=T,sep= "")
names(test.frame)
head(test.frame)
class(test.frame)
@

\begin{figure}[htbp]
\begin{center}
\setkeys{Gin}{width=0.5\textwidth}
<<echo=FALSE,fig=TRUE,width=4,height=4>>=
#### Must tell plot where to get the data from. Could also use test.frame$year
with(test.frame,plot(year,value))
@
\end{center}
\end{figure}
\end{document}

Вышеприведенное работает нормально с RStudio (последний) и Tinn-R (последний), и создается нужный PDF-документ.

Вопросы:

  1. Если я назвал указанный выше файл как goodex.snw и запустил Sweave, я получил файл goodex-004.pdf с Tinn-R или RStudio в качестве PDF-изображения графика.Почему трейлинг 004?Можно ли это изменить?

  2. Можно ли создать файл EPS?Является ли инструмент, с помощью которого Sweave компилируется в PDF, только через (PDF) LaTeX, а не через традиционный маршрут DVI> PS> PDF?

  3. Просто запустите команду with(test.frame,plot(year,value)) в *Командное окно 1033 * генерирует больше значений по оси y, то есть 15000, 20000, 25000 и 30000. Однако в файле PDF, созданном Sweave с помощью моего кода в верхней части этого поста, я не получаю все значения по оси y.ось (только 15000 и 25000).Как контролировать размер графика прямо в коде, чтобы отображались все необходимые значения y?


Обновление: файл apples.d содержит:

#Number of apples I ate
year value
8   12050  #year 2008  
9   15292  #year 2009 
10  23907  #year 2010 
11  33997  #year 2011

1 Ответ

3 голосов
/ 01 декабря 2011

Ваш пример не воспроизводим, потому что у нас нет файла apples.d, поэтому мы можем только догадываться, почему сюжет идет не так.Пожалуйста, смотрите:

Как сделать великолепный воспроизводимый пример R?

о том, как сделать воспроизводимый пример.

Обратите внимание, что Sweaveэто не функциональность Rstudio или Tinn-R, это функция R (Sweave()), которую можно запустить из командной строки или с аргументами из исполняемого файла R.Это может быть полезно знать, если вы ищете информацию.

Что касается ваших вопросов:

  1. Имена графиков всегда имеют форму FILENAME-CHUNKLABEL.pdf или eps, где чанкметка может быть установлена ​​как опция для блока Sweave (это первый аргумент).Если вы не установите имя чанка, будут перечислены графики.
  2. Вы можете использовать eps с опцией eps=true.Я вполне уверен, что по умолчанию и EPS, и PDF создаются.Что касается компиляции, Sweave не компилируется сама по себе, она создает файл .tex, который вы можете использовать любым способом, который вам нужен.В версии 2.14 есть возможность автоматически запускать pdfLaTeX для созданного файла .tex.Компиляция Rstudio и Tinn-R, вероятно, осуществляется с помощью вызова pdfLaTeX после Sweave.Вы можете сделать это вручную, если хотите сделать это по-другому.
  3. Без воспроизводимого примера мы можем только догадываться.Что не так?Вы можете установить пределы графика с помощью аргументов xlim и ylim, но это не должно быть ошибкой.

Редактировать:

В ответ на отредактированный вопрос с данными.Сначала просто совет.Этот способ предоставления данных не самый полезный способ сделать это.Мы, конечно, можем воспроизвести это, но гораздо проще, если вы предоставите данные так, чтобы мы могли сразу же запустить их.Например:

test.frame<-data.frame(year=8:11, value= c(12050,15292,23907,33991))

Что касается графика, вы имеете в виду метки на оси Y?Это можно изменить, пропустив оси в вызове plot и установив их вручную с помощью функции axis():

with(test.frame,plot(year,value,axes=FALSE))
axis(1)
axis(2,test.frame$value,las=1)

Это выглядит немного странно, если тики не постоянно распределяются по оси.Лучше было бы:

with(test.frame,plot(year,value,axes=FALSE))
axis(1)
axis(2,seq(10000,35000,by=5000),las=1)
...