2012-02-02 33 views
11

का उपयोग कर लूप में भूखंड बनाएं, मुझे उसी दृश्य के साथ 250 भूखंड उत्पन्न करना होगा।ggplot2

मेरे उदाहरण डेटा सेट:

df <- data.frame(name = c("john","alex","mike","dennis","alex"), 
      expenses = c("10","12","15","8","2"), 
      type = c("food","rent","rent","food","food")) 

मैं एक ही प्लॉट में हर नाम के लिए खर्च के साथ बार भूखंडों चाहते हैं। "एलेक्स" के लिए भूखंड देखने की तरह होगा:

selected.name <- "alex" 
df1 <- subset(df, name == selected.name) 
ggplot(data = df1, aes(type, expenses)) + geom_bar() 

अब मैं एक पाश कि df में हर नाम के लिए एक ही भूखंड भूखंडों का उपयोग करना चाहते। मैंने एक लूप का उपयोग करने का प्रयास किया है जो उपरोक्त प्लॉट कोड को स्रोत फ़ाइल के रूप में चलाता है। लेकिन मैं नाम परिवर्तक को स्रोत फ़ाइल में पास नहीं कर सकता ताकि यह प्रत्येक नाम के लिए ग्राफ को प्लॉट कर सके। अब मुझे केवल लूप के लिए एक ग्राफ मिलता है।

+0

कृपया अपना प्रश्न थोड़ा और निर्दिष्ट करें। क्या आपकी समस्या है कि आपको केवल 1 विंडो के साथ 1 विंडो मिलती है? 'x11()' से अधिक समाधान हो सकता है। यदि आप पीडीएफ को सहेजना चाहते हैं तो 'पीडीएफ (फाइल)' प्रिंट (जीजीप्लॉट (...) '' dev.off() '.... – Seb

+0

हाय सेब का उपयोग करें, उत्तर के लिए धन्यवाद। मैं एक साजिश बनाना चाहता हूं प्लॉट मैंने डीएफ में हर दूसरे नाम के लिए एलेक्स नाम के लिए बनाया है। मैन्युअल रूप से नामों को टाइप करने के बिना। क्योंकि वास्तविक डेटा में 250 नाम हैं। उम्मीद है कि इससे मदद मिलती है। – jeroen81

+1

@ सेब, मैं इसके बजाय ggsave के लिए जाऊंगा पीडीएफ() –

उत्तर

15

अपने orignal प्रश्न का उत्तर देने के लिए। इस तरह से आप बुलाया Adam.pdf आदि इसके बाद आप बिल्ली को pdftk (पीडीएफ उपकरण किट) इस्तेमाल कर सकते हैं फ़ाइलों को एक साथ एक में पीडीएफ फाइलों की एक बड़ी संख्या के साथ अंत में

doPlot = function(sel_name) { 
    dum = subset(df, name == sel_name) 
    ggobj = ggplot(data = dum, aes(type, expenses)) + geom_bar() 
    print(ggobj) 
    ggsave(sprintf("%s.pdf", sel_name)) 
} 
lapply(unique(df$name), doPlot) 

: इस का उपयोग कर मानक अनुसंधान करने के लिए दस्तावेज़। मैं अभी भी पसंद करेंगे, उदाहरण के लिए एक बेहतर समाधान मुखौटा या एक अलग प्रकार की साजिश।

क्या यह फ़ेसटिंग का उपयोग करने के लिए बेहतर नहीं होगा? अपने उदाहरण को देखते हुए कोड होगा:

ggplot(data = df, aes(type, expenses)) + 
    geom_bar() + facet_wrap(~name) 

जो निम्नलिखित साजिश की ओर जाता है:

enter image description here

हो सकता है कि 250 के नाम और अधिक चर के लिए, यह एक समस्या हो सकती है। लेकिन मैं फिर भी facetting देखना होगा।

+0

धन्यवाद पॉल, यह एक अच्छी सुविधा है। यह भूखंडों की तुलना करने में आसान है। असली डीएफ में 250 नाम और 12 व्यय चर। यह एक बहुत ही जटिल साजिश उत्पन्न करेगा। मैं एक रिपोर्टिंग टूल तैयार कर रहा हूं जो प्रति कर्मचारी के सभी प्रकार के केपीआई उत्पन्न करता है। और हम इस रिपोर्ट में तुलना नहीं करते हैं। इसलिए मुझे सभी अलग-अलग भूखंडों की आवश्यकता क्यों है। लेटेक्स/आर sweave के साथ उत्पन्न रिपोर्ट। – jeroen81

+1

मैंने अलग-अलग पीडीएफ में व्यक्तिगत भूखंडों के साथ एक समाधान जोड़ा मेरे जवाब में फाइलें। –

+0

धन्यवाद पॉल, यह अभी मेरे लिए बिल्कुल सही काम करता है। मैं अपनी जरूरतों के लिए कार्यों को आगे बढ़ा सकता हूं। – jeroen81

1

एक कॉलेग्यू ने अभी बताया कि फ़ंक्शन में सबसेट का उपयोग करना बहुत बुरा विचार है। अधिक जानकारी के लिए ?subset() देखें। तो मैंने पॉल Hiemstra के anwser अनुकूलित किया और सबसेट बदल दिया।

doPlot = function(sel_name) { 
    dum <- df[df$name == sel_name,] 
    ggobj = ggplot(data = dum, aes(type, expenses)) + geom_bar() 
    print(ggobj) 
    ggsave(sprintf("%s.pdf", sel_name)) 
} 
lapply(unique(df$name), doPlot) 
+0

+1! महान बिंदु। सब्सेंट शोल – marbel