2013-02-26 83 views
5

क्या एक बार में कई आउटपुट उपकरणों में ग्राफ को प्लॉट करना संभव है? मैंने कोशिश की:आर में नेस्टिंग आउटपुट डिवाइस?

getwd() 

pdf("level1.pdf") 
    pdf("level2.pdf") 
    png("level3.png") 

    x=1:10 
    y=1:10 
    plot(x, y) 

    dev.off() # close level3 
    dev.off() # close level2 

    a=10:20 
    b=-10:0 
    plot(a,b) 

dev.off() # close level1 

XY साजिश केवल level3.png में चला जाता। (मुझे सभी 3 फाइलों में जाना चाहिए)

आश्चर्यजनक रूप से, एबी प्लॉट स्तर 2.pdf में जाता है, जहां मुझे उम्मीद है कि इसे लेवल 1.pdf पर लिखा जाए, क्योंकि level2.pdf पहले ही बंद होना चाहिए?

उत्तर

3

ggplot2 आप साजिश चर वस्तुओं प्रदान कर सकते हैं और print उनके साथ कई बार:

library(ggplot2) 
p <- ggplot(data.frame(x=1:10, y=1:10), aes(x=x, y=y)) + geom_point() 

pdf('a.pdf') 
print(p) 
dev.off() 

png('b.png') 
print(p) 
dev.off() 

या, साथ ggsave (रोलाण्ड के लिए धन्यवाद, लेकिन यह अपने सिस्टम पर एक डमी विंडो खोलता है - उबंटू):

ggsave('a.pdf', p) 
ggsave('b.png', p) 

नहीं के बारे में "नियमित" भूखंडों यकीन है कि, मैं ggplot2 उपयोग कर रहा हूँ जब भी मैं कर सकते हैं।

+1

समारोह 'ggsave' और भी अधिक सुविधाजनक है। – Roland

4

यह है वर्तमान में "सक्रिय" और सभी ग्राफिक्स आउटपुट डिवाइस के लिए भेज दिया जाता है एक से अधिक डिवाइस एक ही समय में खुला है, लेकिन * केवल एक डिवाइस के लिए संभव है। तो नहीं, आप कई आउटपुट उपकरणों में एक बार ग्राफ को प्लॉट नहीं कर सकते (समानांतर/समान समय में मेरा मतलब है)। यहां मैं डिवाइस क्लास के कुछ आसान कार्यों का विस्तार करता हूं जिनका आप उपयोग कर सकते हैं।

  • dev.List():

    आप कार्यों का उपयोग कर सकते हैं टी मौजूदा सक्रिय उपकरण प्राप्त करने के लिए खुला उपकरणों

  • dev.cur() के सूची प्राप्त
  • dev.set() रूप से सक्रिय उपकरण बदलने के लिए
  • dev.next() और dev.prev(): डिवाइस सूची पर अगली/पिछली डिवाइस बनाने के लिए
,210

उदाहरण के लिए:

pdf("level1.pdf") 
pdf("level2.pdf") 
png("level3.png") 
## list the devices 
dev.list() 
     pdf   pdf png:level3.png 
     2    3    4 


## current device 
dev.cur() 
png:level3.png   ## that's why The XY plot goes only into this device 
       4 
### this will go in the current device 
x=1:10 
y=1:10 
plot(x, y) 
## change the active device 
dev.set(dev.next()) 
pdf 
    2 
### close all devices 
graphics.off() 
## list the devices 
dev.list() 
NULL 

तो अपने उदाहरण पर इस आवेदन:

pdf("level1.pdf") 
pdf("level2.pdf") 
png("level3.png") 
dev.off() # close level3 
dev.off() # close level2 
dev.cur() 
pdf   ## plot A,B goes on this device 
    3