2013-06-24 61 views
1

我遇到了以下問題,如果有人可以給我一些輸入,我將不勝感激。r在單個jpeg上顯示多個圖形

我想將多個數字導出到單個jpeg文件。我首先創建一個圖形格,然後導出。我的主要問題是,它與PDF而不是JPEG工作。有任何想法嗎?

謝謝

#set the windows of the frames 
par(mfcol=c(3,2)) 

#create the jpeg file 
jpeg(filename=names(a1),".jpg",sep=""), 
    quality=100, 
    width=1024, 
    height=768) 

#plot 1 
plot(a1,b1) 
#plot 2 
plot(a1,b2) 
#plot 3 
plot(a1,b3) 

#plot 4 
plot(a2, c1) 
#plot 5 
plot(a2, c2) 
#plot 6 
plot(a2, c3) 

#dev.off shuts down the specified (by default the current) graphical device 
#here it passes the picture to the file 
dev.off() 
+0

你已經忽略你的代碼的顯著一部分......如果你能包括複製您的問題將有很大的幫助工作,重複的代碼。 「名字(a1)」是一個矢量,並且你在那裏有一個「粘貼」?你使用pdf時做了什麼?你打算在打電話給'jpeg'之前打開一個圖形設備('par(...)')嗎? – Justin

回答

1

是否要在一個單一的JPEG文件多1024x768的圖片目前尚不清楚 - 這是沒有意義的 - 你是否要包含6個地塊單個JPEG圖像。

正如我所說,與PDF不同,JPEG不是多頁格式。因此,您可以將R導出爲多個JPEG文件,但不能在一個JPEG中包含所有單獨的圖形。

的r設備允許在文件名通配符,所以如果你想在6個地塊導出到文件foo001.jpegfoo002.jpegfoo00x.jpeg那麼你可以使用下面的

jpeg(filename = "foo%03d.jpeg", ....) 
.... # plotting commands here 
dev.off() 

,如果你做的多條曲線沒有發生什麼通配符/佔位符是在?jpeg文件說:

If you plot more than one page on one of these devices and do not 
include something like ‘%d’ for the sequence number in ‘file’, the 
file will contain the last page plotted. 

處理多個頁面的設備,因爲基礎文件格式允許它可以將多個圖表放入單個文件中,因爲這是有意義的,例如, pdf()postscript()。這些設備的參數爲onefile,可用於指示是否需要單個文件中的多個圖。

然而,par(mfcol=c(3,2))讓我想你想在同一裝置區域中的3×2組圖形。這是允許的,但你需要撥打par()你打開jpeg()設備,而不是之前。如圖所示,您的代碼將主動設備分成3x2繪圖區域,然後打開一個新設備,該設備會提取默認參數,而不是您在調用jpeg()之前在設備上設置的參數。這是如下圖所示:

> plot(1:10) 
> dev.cur() 
X11cairo 
     2 
> op <- par(mfrow = c(3,2)) 
> jpeg("~/foo.jpg") 
> par("mfrow") 
[1] 1 1 
> dev.off() 
X11cairo 
     2 
> par("mfrow") 
[1] 3 2 

因此你想或許想要的東西,如:

jpeg(filename=names(a1),".jpg",sep=""), quality=100, 
    width=1024, height=768) 
op <- par(mfcol=c(3,2)) 
#plot 1 
plot(a1,b1) 
#plot 2 
plot(a1,b2) 
#plot 3 
plot(a1,b3) 
#plot 4 
plot(a2, c1) 
#plot 5 
plot(a2, c2) 
#plot 6 
plot(a2, c3) 
par(op) 
dev.off() 

+0

謝謝你Gavin!爲了澄清,我想要一個包含6個圖的單個jpeg圖像。您是對的,我在打電話給jpeg之前打開了設備。它非常好用。我附上我的初始代碼,但這次更正了,幷包含一個可重複的示例。 – user2493820

+0

不,你分割當前設備*,然後*打開'jpeg()'設備。這可能看起來很挑剔,但這就是爲什麼它沒有達到你的預期。 –

0

改正的代碼

#data 
a1<-seq(1,20,by=1) 
b1<-seq(31,50,by=1) 
b2<-seq(51,70,by=1) 
b3<-seq(71,90,by=1) 

#create the jpeg file 
jpeg(filename="a.jpg", 
    quality=100, 
    width=1024, 
    height=768) 

#set the create the frames 
par(mfcol=c(3,1)) 

#plot the graphs 
plot(a1,b1) 
plot(a1,b2) 
plot(a1,b3) 


#par(op) 

#dev.off shuts down the specified (by default the current) graphical device 
#here it passes the picture to the file 
dev.off() 
相關問題