2014-10-28 3 views
9

मुझे आर में हिस्टोग्राम बनाने में दिलचस्पी है जिसमें एक दूसरे के शीर्ष पर दो (या अधिक) आबादी होगी, जिसका अर्थ है - मैं नहीं चाहता कि दो हिस्टोग्राम एक ही ग्राफ को साझा करते हैं लेकिन एक बार जिसमें दो रंग या अधिक शामिल हैं।आर हिस्टोग्राम एकाधिक आबादी के साथ

नीचे दी गई छवि मिली - यही वह है जिसे मैं पूरा करना चाहता हूं।

example

कोई भी विचार?

+0

एक स्टैक्ड बार भूखंड/चार्ट है कि। यहां स्टैक ओवरफ्लो जैसे कई उदाहरण हैं जैसे http://stackoverflow.com/questions/21236229/ggplot2-stacked-bar-chart और http://stackoverflow.com/questions/6693257/making-a-stacked-bar-plot- के लिए-बहु-चर-ggplot2 में आर। यदि आप अपने डेटा का कुछ डेटा/पुनरुत्पादित उदाहरण दिखाते हैं, तो इससे दूसरों की आपकी सहायता करने में मदद मिलेगी। –

+0

'barplot' पर एक नज़र डालें। जैसे बैरलोट (वाडेथ्स, किंवदंती = राउनम्स (वाडेथ्स)) '। – jbaums

उत्तर

12

वास्तव में ggplot2 में कष्टप्रद डिफ़ॉल्ट है कि:

library(ggplot2) 
ggplot(iris, aes(x=Sepal.Length, fill=Species)) + 
    geom_histogram() 

resulting plot

2
# 1) Define the breaks to use on your Histogram 
xrange = seq(-3,3,0.1) 

# 2) Have your vectors ready 
v1 = rnorm(n=300,mean=1.1,sd=1.5) 
v2 = rnorm(n=350,mean=1.3,sd=1.5) 
v3 = rnorm(n=380,mean=1.2,sd=1.9) 

# 3) subset your vectors to be inside xrange 
v1 = subset(v1,v1<=max(xrange) & v1>=min(xrange)) 
v2 = subset(v2,v2<=max(xrange) & v2>=min(xrange)) 
v3 = subset(v3,v3<=max(xrange) & v3>=min(xrange)) 

# 4) Now, use hist to compute the counts per interval 
hv1 = hist(v1,breaks=xrange,plot=F)$counts 
hv2 = hist(v2,breaks=xrange,plot=F)$counts 
hv3 = hist(v3,breaks=xrange,plot=F)$counts 

# 5) Finally, Generate a Frequency BarPlot that is equivalent to a Stacked histogram 
maintitle = "Stacked Histogram Example using Barplot" 
barplot(rbind(hv1,hv2,hv3),col=2:4,names.arg=xrange[-1],space=0,las=1,main=maintitle) 

# 6) You can also generate a Density Barplot 
Total = hv1 + hv2 + hv3 
barplot(rbind(hv1/Total,hv2/Total,hv3/Total),col=2:4,names.arg=xrange[-1],space=0,las=1) 
+0

महान जवाब! मैं अपने घनत्व साजिश को पारंपरिक बनाने के लिए 2 सुझाव देना चाहता हूं, और अधिक सामान्य। परंपरागत घनत्व हिस्टोग्राम बनाने के लिए 'कुल = योग (एचवी 1, एचवी 2, एचवी 3)' का उपयोग करें, जहां सभी बार के लिए मानों का योग 1 के बराबर होता है, प्रत्येक बार के बराबर प्रत्येक बार के बराबर होता है। संभावित असमान चौड़ाई के डिब्बे के लिए सही करने के लिए, उपयोग करें 'rbind (एचवी 1/(कुल * diff (xrange), एचवी 2/(कुल * diff (xrange), एचवी 3/(कुल * diff (xrange))'। –

2

यहाँ ggplot का उपयोग किए बिना एक और विकल्प है:

#plot the entire data set (everything) 
hist(everything, breaks=c(1:10), col="Red") 

#then everything except one sub group (1 in this case) 
hist(everything[everything!=1], breaks=c(1:10), col="Blue", add=TRUE) 

#then everything except two sub groups (1&2 in this case) 
hist(everything[everything!=1 && everything!=2], breaks=c(1:10), col="Green", add=TRUE) 
संबंधित मुद्दे