2012-02-16 20 views
14

में किए गए हैं, मैं संभावनाओं की मात्रा के साथ थोड़ा सा खो गया हूं, और नेट पर खोजने के लिए संघर्ष को एक सरल समस्या के बारे में एक सरल उत्तर ।एकाधिक ggplot2 प्लॉट्स के ग्रिड जो एक नए ggplot2 उपयोगकर्ता के रूप में लूप

मैं एक ही चादर पर ggplot2 से कई भूखंड प्रदर्शित करना चाहता हूं, लेकिन यह जानकर कि ये भूखंड लूप से आते हैं।

निम्न उदाहरण संकलित करता है नहीं है, यह केवल वर्णन करने के लिए है:

for(i in c(1:n)){         
    for(j in c(1:m)){ 
    .......... # some data production 
    p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j]) 
}} 

यहाँ, पी ओवरराइट है, लेकिन मैं बजाय एक मैट्रिक्स या एक सूची है, जिसमें मैं के रूप में सभी पी रख सकते हैं करना चाहते हैं वे उत्पादन कर रहे हैं, तो

display_in_a_grid(list_of_ggplot_plots) 

लेकिन जैसे एक साधारण समारोह के रूप में जहाँ तक मैं करने की कोशिश की, मैं साजिश के मैट्रिक्स की एक सूची बनाने के लिए, न तो एक समारोह है कि निवेश के लिए केवल एक ही तर्क लेता खोजने के लिए सक्षम नहीं था।

चीजें मैं पर एक नज़र पड़ा है के बारे में:

"arrangeGrob" पैकेज क्योंकि यह प्रत्येक भूखंड के लिए एक स्पष्ट नाम की आवश्यकता है gridExtra काम नहीं करता है से (जैसे: p1, p2, p3, ...) की तरह

आप इस का प्रबंधन करने का आसान तरीका होगा: http://code.google.com/p/gridextra/wiki/arrangeGrob

में "पहलू" ggplot2 की विधि अपने डेटा सेट के संगठन (पी या विपरीत) के लिए अनुकूल नहीं है?

धन्यवाद,

फ़्राँस्वा

+1

आप सही रास्ते पर हैं। यदि आप विभिन्न मामलों के बार बार चार्ट तैयार कर रहे हैं, तो एकाधिक पहलुओं वाला एक साजिश मानक दृष्टिकोण है। एकाधिक भूखंडों के लिए एक हैक खोजने के बजाय, यह संभवतः इसे प्राप्त करने के लिए उपयुक्त फ़ॉर्म में हेरफेर करना सबसे अच्छा होगा। –

+0

धन्यवाद। मैं मानता हूं कि यह निश्चित रूप से सबसे तर्कसंगत समाधान है। बात यह है कि प्रत्येक अलग साजिश के लिए, मैं कुछ डेटा उपचार (कुल छोटे वर्ग और पूर्ण ची स्क्वायर टेस्ट) बनाना चाहता हूं और पी-वैल्यू को इंडुविडुअल प्लॉट शीर्षक के रूप में प्रदर्शित करना चाहता हूं। तो यह निश्चित रूप से पहलू विधि में शामिल करना संभव है, लेकिन मुझे लगता है कि मुझे किसी बिंदु पर किसी भी तरह से एक पी लूप का उपयोग करना होगा। – fstevens

+0

आप पी मानों के साथ प्रत्येक पहलू को एनोटेट करने के लिए 'geom_text' का उपयोग कर सकते हैं। –

उत्तर

26

मैं रिची के साथ सहमत करने के लिए इच्छुक किया जाएगा, लेकिन अगर आप उन्हें अपने आप को व्यवस्था करने के लिए करना चाहते हैं:

library(gridExtra) 
library(ggplot2) 
p <- list() 
for(i in 1:4){ 
    p[[i]] <- qplot(1:10,10:1,main=i) 
} 
do.call(grid.arrange,p) 

अंत में उदाहरण पर एक नज़र ?arrangeGrob के लिए लूप को पूरी तरह खत्म करने के तरीकों के लिए:

plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x))) 
require(gridExtra) 
do.call(grid.arrange, plots) 
+0

धन्यवाद। बहुत स्पष्ट है कि मैंने मदद पुस्तिकाओं में जो जानकारी पढ़ी है, और do.call फ़ंक्शन का एक उदाहरण जो मैंने कभी नहीं उपयोग किया है। यदि मैं पहलुओं का उपयोग करने में विफल रहता हूं तो मैं इस समाधान का उपयोग करूंगा। – fstevens

+3

आपका पहला उदाहरण "qplot (सी (1:10), सी (10: 1) + i, main = i) के मामले में समान भूखंड पैदा करता है" –