मुझे geom_bar()
और position="dodge"
समझने में काफी समय लगता है। मैं दो समूहों को चित्रित करने वाले कुछ बार ग्राफ बनाने की कोशिश कर रहा था। मूल रूप से डेटा दो अलग-अलग डेटा फ्रेम से था। प्रति this question, मैंने अपना डेटा लंबे प्रारूप में रखा है। मेरा उदाहरण:ggplot2, geom_bar, और position = "dodge" के साथ समस्या: ढेर में सही y मान हैं, dodged
test <- data.frame(names=rep(c("A","B","C"), 5), values=1:15)
test2 <- data.frame(names=c("A","B","C"), values=5:7)
df <- data.frame(names=c(paste(test$names), paste(test2$names)), num=c(rep(1,
nrow(test)), rep(2, nrow(test2))), values=c(test$values, test2$values))
मैं उस उदाहरण का उपयोग करता हूं क्योंकि यह व्यय बनाम बजट उदाहरण के समान है। व्यय में names
कारक स्तर पर कई पंक्तियां हैं जबकि बजट में केवल एक (प्रति वर्ग एक बजट राशि) है।
एक स्टैक्ड बार भूखंड के लिए, यह महान काम करता है:
ggplot(df, aes(x=factor(names), y=values, fill=factor(num))) +
geom_bar(stat="identity")
विशेष रूप से, ध्यान दें y मूल्य maxes। वे test
से डेटा की रकम हैं जो शीर्ष पर नीले रंग पर दिखाए गए test2
के मानों के साथ हैं।
ggplot(df, aes(x=factor(names), y=values, fill=factor(num))) +
geom_bar(stat="identity", position="dodge")
यह बहुत अच्छा लग रहा है:
अन्य प्रश्न मैं पढ़ा है के आधार पर, मैं बस यह एक साइड-बाई-साइड साजिश बनाम एक खड़ी एक बनाने के लिए position="dodge"
जोड़ने की जरूरत , लेकिन नए अधिकतम वाई मानों को नोट करें। ऐसा लगता है कि यह वाई मान के लिए test
से प्रत्येक नाम कारक स्तर से अधिकतम वाई मान ले रहा है। यह अब उन्हें संक्षेप में नहीं है।
ggplot(df, aes(x=factor(names), y=values, fill=factor(num), group=factor(num))) +
geom_bar(stat="identity", position="dodge")
मुझे समझ नहीं आता क्यों खड़ी काम करता है महान:
कुछ अन्य सवालों के प्रति (जैसे this one और this one, मैं भी सफलता नहीं मिली group=
विकल्प (जैसा कि ऊपर एक ही टाल साजिश का उत्पादन) जोड़ने की कोशिश की और टाल सिर्फ उन्हें कंधे से बजाय की चोटी पर पक्ष नहीं करता है
अनुमानित समय। मैं पर इस बारे में एक recent question पाया क्या हो रहा है यह देखने के लिए alpha=0.5
जोड़ने के सुझाव के साथ ggplot google समूह। ऐसा नहीं है कि ggplot प्रत्येक समूह से अधिकतम मूल्य ले रहा है; यह वास्तव में प्रत्येक मूल्य के लिए एक दूसरे के ऊपर सलाखों को ओवर-प्लॉटिंग करता है।
ऐसा लगता है कि position="dodge"
का उपयोग करते समय, ggplot केवल x y प्रति x की अपेक्षा करता है। मैंने विंस्टन चांग से संपर्क किया, इसके बारे में पुष्टि करने के लिए एक जीजीप्लॉट डेवलपर के साथ-साथ यह पूछने के लिए कि क्या इसे बदला जा सकता है क्योंकि मुझे कोई लाभ नहीं दिख रहा है।
ऐसा लगता है कि stat="identity"
हिसाब करने के y=val
व्यक्ति मायने रखता है जो stat="identity"
बिना होता है और जब कोई y मूल्य गुजर के बजाय aes()
अंदर पारित कर दिया ggplot बताना चाहिए।
अभी के लिए, वैकल्पिक हल (ऊपर मूल df के लिए) एकत्र करने के लिए हो रहा है तो वहाँ प्रति एक्स केवल एक y है:
df2 <- aggregate(df$values, by=list(df$names, df$num), FUN=sum)
p <- ggplot(df2, aes(x=Group.1, y=x, fill=factor(Group.2)))
p <- p + geom_bar(stat="identity", position="dodge")
p
समझ गया। यह आपके लिए यह इंगित करने में काफी मददगार था कि मैं वास्तव में दोनों डोडिंग और स्टैकिंग के लिए पूछ रहा हूं। एक quibble: जब 'stat =" पहचान "' (मूल रूप से एक हिस्टोग्राम बनाने) का उपयोग नहीं करते हैं, तो कुछ अन्य विशेषताओं के बीच डोजिंग करते समय व्यक्तिगत गणनाओं को "stacking" ggplot नहीं है? फिर भी, मैं जवाब के साथ ठीक हूं कि यह इस समय काम करता है। मैंने सोचा कि मैं अपने कोड में कुछ गलत कर रहा था! – Hendy
'geom_bar' थोड़ा उलझन में हो सकता है क्योंकि इसका उपयोग दो अलग-अलग उद्देश्यों के लिए किया जाता है: कभी-कभी इसका उपयोग आपके द्वारा प्रदान किए जाने वाले वाई मानों को साजिश करने के लिए किया जाता है, और कभी-कभी यह प्रत्येक में मामलों की संख्या की गणना करता है और उस मान को y मान के रूप में उपयोग करता है (' स्टेट = "बिन" ')। बाद वाला व्यवहार डिफ़ॉल्ट है (आप इसे 'ggplot (df, aes (x = factor (names), fill = factor (num) के साथ देख सकते हैं)) + geom_bar (रंग = "काला") ')। इस मामले में, "स्टैकिंग" काफी समान नहीं है - यह सारांश _stat_ है, जबकि सामान्य स्टैकिंग _position समायोजन_ है। ये चीजें ggplot पाइपलाइन के विभिन्न चरणों में होती हैं। स्पष्टीकरण के लिए – wch
धन्यवाद। एकत्रित करना एक बड़ा सौदा नहीं है और अब मुझे पता है कि मुझे इसकी आवश्यकता है, जो भ्रमित होने से एक बड़ा कदम है :) – Hendy