2014-10-28 18 views
9

Bir histogramın iki (veya daha fazla) popülasyonun üst üste olmasını içerecek şekilde bir histogram oluşturmak istiyorum - aynı grafiği ancak bir çubuğu paylaşan iki histogram istemiyorum iki renk veya daha fazlasını içeren.R histogramını birden fazla popülasyonla

Aşağıdaki resmi buldum - bu benim başarmak istediğim şey.

example

Herhangi bir fikir? Aslında ggplot2 can sıkıcı varsayılan

+0

. Http://stackoverflow.com/questions/21236229/ggplot2-stacked-bar-chart ve http://stackoverflow.com/questions/6693257/making-a-stacked-bar-plot- gibi yığın akışında birçok örnek var. için-çoklu-değişken-ggplot2-in-r. Verilerinizin bazı verileri/tekrarlanabilir örneklerini gösterirseniz, başkalarının size yardımcı olmasına yardımcı olur. –

+0

'? Barplot''a bir göz atın. Örneğin. barplot (Vepeaths, legend = rownames (VADeaths)). – jbaums

cevap

12

: Burada

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

Harika cevap! Yoğunluğunuzu geleneksel hale getirmek için 2 öneride bulunmak istiyorum ve daha genel. * Toplam = toplam (hv1, hv2, hv3) 'i kullanarak, tüm çubukların değerlerinin toplamı 1'e eşittir, geleneksel olarak her çubuk için 1'e karşılık gelen bir geleneksel yoğunluk histogramı kullanın. Potansiyel olarak eşitsiz genişlikte kutuları düzeltmek için rbind (hv1/(Toplam * fark (xrange), hv2/(Toplam * fark (xrange), hv3/(Toplam * fark (xrange)) '. –

2

ggplot kullanmadan başka bir seçenek:

bir yığın çubuk grafiği/çizelgesi var
#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) 
İlgili konular