2011-12-02 39 views
0

當我在命令行上嘗試它時,我可以獲得4x4圖表,但不能在下面的代碼中使用-loop和png元素。我很沮喪,問題是什麼,我試圖瞭解這個現在幾個小時,不能前進。R:使用for -loop和png繪製4x4圖,爲什麼要獲得1x1而不是4x4?

只需要$ R CMD Sweave paper.Rnw,$ pdflatex paper.tex$ evince paper.pdf將下面的代碼複製到paper.Rnw文件後,您將得到1x1而不是4x4的圖。爲什麼?

$ mkdir Pictures 
$ mkdir Data 
$ cd Data 
$ wget https://noppa.aalto.fi/noppa/kurssi/mat-2.3128/harjoitustyot/Mat-2_3128_data_2.xls 
$ cd .. 
$ cat paper.Rnw 

\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage{amsfonts} 
\usepackage{amsmath} 
\usepackage{graphicx} 

\begin{document} 

<<echo=FALSE>>= 
library(gdata) 
f<-read.xls('./Data/Mat-2_3128_data_2.xls') 


for(i in 1:ncol(f)) 
{ 
    png(paste('./Pictures/CO',i,'.png',sep ='')) 
    par(mfrow=c(2,2)) 
    plot(pacf(na.omit(f[,i])), main=paste('Pacf', i)) 
    plot(acf(na.omit(f[,i])), main=paste('Acf', i)) 
    plot(na.omit(f[,i]), main=paste('Data', i), type='l') 
} 
@ 

\subsection{Time-serie C1} 
\includegraphics{./Pictures/CO1.png} 
\subsection{Time-serie C2} 
\includegraphics{./Pictures/CO2.png} 
\subsection{Time-serie C3} 
\includegraphics{./Pictures/CO3.png} 
\subsection{Time-serie C4} 
\includegraphics{./Pictures/CO4.png} 
\subsection{Time-serie C5} 
\includegraphics{./Pictures/CO5.png} 

\end{document} 
+0

如果你的'面值(mfrow = ...)'是外循環? – Andrie

+0

@Andrie:可能不是因爲它應該用相同的邏輯創建許多4x4圖片。 – hhh

+0

看起來像在代碼塊的末尾缺少一個正在關閉的'dev.off()'調用,該調用以'png(paste ...')打開一個png圖形設備開頭,是否解決了這個問題? –

回答

5

功能acf和​​具有一個參數plot默認爲TRUE。因此,情節聲明不是必需的(否則您得到acf的兩個地塊和​​的兩個地塊)。請注意,我還添加了dev.off()聲明。

這應該工作:

for(i in 1:ncol(f)) 
{ 
    png(paste('./Pictures/CO',i,'.png',sep ='')) 
    par(mfrow=c(2,2)) 
    pacf(na.omit(f[,i]), main=paste('Pacf', i)) 
    acf(na.omit(f[,i]), main=paste('Acf', i)) 
    plot(na.omit(f[,i]), main=paste('Data', i), type='l') 
    dev.off() 
} 
@