2012-04-13 14 views
12

ggplot2 का उपयोग करके मैं क्षैतिज धुरी पर एक कारक के साथ एक हिस्टोग्राम बना रहा हूं और एक रंगीन स्थिति का उपयोग करके भरने वाले रंग के लिए एक और कारक बना रहा हूं। मेरी समस्या यह है कि भरने का कारक कभी-कभी क्षैतिज कारक के मूल्य के लिए केवल एक मान लेता है, और बार को चकमा देने के लिए कुछ भी पूर्ण चौड़ाई नहीं लेता है। क्या इसे कुछ भी चकमा देने का कोई तरीका नहीं है ताकि सभी बार चौड़ाई समान हों? या समकक्ष 0 के साजिश के लिए?हमेशा एक हिस्टोग्राम चकमा देने का एक तरीका?

उदाहरण

लिए
ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) + 
geom_histogram(position = "dodge") 

enter image description here

This answer कुछ उपाय दिए गए हैं। नए संस्करण को जारी करने से पहले यह भी पूछा गया था, तो शायद कुछ बदल गया? पहलुओं का उपयोग करना (here दिखाया गया) मुझे अपनी स्थिति पसंद नहीं है, हालांकि मुझे लगता है कि डेटा संपादित करना और geom_bar का उपयोग कर काम कर सकता है, लेकिन यह सुरुचिपूर्ण लगता है। इसके अलावा, वैसे भी Facetting जब मैंने कोशिश की

ggplot(mtcars, aes(x = factor(carb), fill = factor(gear))) + 
    geom_bar() + facet_grid(~factor(carb)) 

मैं त्रुटि मिलती है "layout_base करने में त्रुटि (डेटा, कॉलम, ड्रॉप = बूंद): कम से कम एक परत Facetting के लिए इस्तेमाल सभी चर शामिल होना चाहिए"

मैं लगता है मुझे गिनती के एक डेटा फ्रेम उत्पन्न कर सकता है और उसके बाद geom_bar उपयोग करते हैं,

mtcounts <- ddply(subset(mtcars, select = c("carb", "gear")), 
    .fun = count, .variables = c("carb", "gear")) 

स्तरों कि 0 के साथ मौजूद नहीं हैं को भर कर। क्या किसी को पता है कि यह काम करेगा या यदि कोई बेहतर तरीका है?

+2

मैं जानता हूँ कि आप इसे आदर्श नहीं मानते, लेकिन मैं मायने रखता है पूर्व की गणना और geom_bar का उपयोग कर ऐसा करने का मेरा पसंदीदा तरीका होगा लगता है। – joran

उत्तर

11

अपडेट किया गयाgeom_bar जरूरतों stat = "identity"

मुझे यकीन है कि अगर यह आप के लिए बहुत देर हो चुकी है नहीं कर रहा हूँ, लेकिन हाल ही में एक पोस्ट here है कि, मैं Joran की सलाह काफ़ी होगा करने के लिए करने के लिए जवाब देखने के पूर्व calculate ggplot कॉल के बाहर की गणना और geom_bar का उपयोग करने के लिए। जैसा कि अन्य पदों के उत्तर के साथ, गणना दो चरणों में प्राप्त की जाती है: सबसे पहले, dcast का उपयोग करके गणना का एक क्रॉसस्टाबलेशन प्राप्त किया जाता है; फिर दूसरा, melt क्रॉसस्टैब्यूलेशन।

library(ggplot2) 
library(reshape2) 

dat = dcast(mtcars, factor(carb) ~ factor(gear), fun.aggregate = length) 
dat.melt = melt(dat, id.vars = "factor(carb)", measure.vars = c("3", "4", "5")) 
dat.melt 

(p <- ggplot(dat.melt, aes(x = `factor(carb)`, y = value, fill = variable)) + 
    geom_bar(stat = "identity", position = "dodge")) 

चार्ट:

enter image description here

+0

अंतिम परिणाम छवि संलग्न करने की भी देखभाल है? –

+0

मैंने चार्ट जोड़ा है, और प्रतिक्रिया को स्पष्ट करने के लिए कुछ संपादकीय परिवर्तन किए हैं। –

+0

कभी भी देर नहीं हुई! उस टिप्पणी को एक पूर्ण उत्तर में विस्तारित करने के लिए धन्यवाद। – Gregor

संबंधित मुद्दे