2012-05-15 14 views
6

में लाइन के साथ एक साथ स्टैक्ड बारप्लॉट मैं लाइन वक्र के साथ निम्नलिखित स्टैक्ड बार प्लॉट बनाना चाहता हूं।लाइन

enter image description here

लेकिन यह क्यों निम्नलिखित कोड काम नहीं करता है? इसे करने का सही तरीका क्या है?

x<-c(0,1,2,3,4,5,6,7,8,9,10,11,12); 

    # To plot line 
    emp_dens <- c(0.107,0.184,0.205,0.185,0.138,0.091,0.049,0.023,0.01,0.0028,0.0012,0.00023,0.00013); 
    dat_dens <- as.matrix(cbind(x,emp_dens)); 


    # To plot stack bar 
    dens_all_k <- c(1.15e-01, 1.89e-01, 2.05e-01, 1.82e-01,1.36e-01,8.68e-02,4.71e-02,2.21e-02,9.17e-03,3.37e-03,1.11e-03,3.37e-04,9.31e-05) 

    # Each k0..5 compose the stack 
    # For example 
    # dens_k0[1] + .... dens_k5[1] ~= dens_all_k[1] 

    dens_k0 <-c(2.52e-02,8.38e-02,1.38e-01, 1.53e-01,1.27e-01,8.44e-02, 4.66e-02, 2.21e-02, 9.16e-03, 3.37e-03,1.11e-03, 3.37e-04, 9.31e-05) 
    dens_k1 <- c(6.75e-02, 8.91e-02, 5.86e-02, 2.51e-02, 8.59e-03,2.25e-03, 4.90e-04,9.35e-05, 1.55e-05,2.21e-06,2.99e-07, 3.55e-08,3.92e-09) 
    dens_k2 <- c(1.70e-02,1.64e-02,7.95e-03, 2.56e-03,6.20e-04,1.20e-04, 1.93e-05, 2.67e-06, 3.23e-07,3.47e-08,3.36e-09, 2.95e-10,2.38e-11) 
    dens_k3 <- c(0.005124596,0,0,0,0,0,0, 0, 0, 0, 0,0,0) 
    dens_k4 <- c(0.0004270497, 0, 0,0,0, 0, 0, 0, 0,0,0, 0, 0) 
    dens_k5 <- c(2.760725e-05, 0, 0, 0,0,0, 0, 0, 0, 0,0, 0,0) 


    barplot(cbind(0:max(x),dens_all_k),xlim=c(0,max(x)),ylim=c(0,max(emp_dens)),,space=0.1,lwd=5,xlab="Value of X",ylab="Densities",font.main=1); 
    lines(dat_dens,lty=1,col="red"); 
+0

है आप gglot2 में यह कोशिश कर सकते: http://had.co.nz/ggplot2/geom_histogram.html –

+6

उदाहरण के लिए +1। –

उत्तर

2

dens_all_k केवल कुल सारांश होता है। यदि आप तस्वीर में बारप्लॉट की तलाश में हैं तो आपको सभी के सूचना की आपूर्ति करने की आवश्यकता है। निम्नलिखित कोड आज़माएं।

dens_kall<-rbind(dens_k0,dens_k1,dens_k2,dens_k3,dens_k4,dens_k5) 
ltext<-c("K0","K1","K2","K3","K4","K5") 
colnames(dens_kall)<-0:12 
barplot(height=dens_kall,xlim=c(0,max(x)),ylim=c(0,max(emp_dens)),,space=0.1,lwd=5,xlab="Value of X",ylab="Densities",font.main=1 
     ,legend.text =ltext, 
     args.legend = list(x = "topright") 
     ); 
lines(dat_dens,lty=1,col="red"); 

उत्पादन enter image description here

+1

कृपया मुझे बताएं कि आप में से कोई भी मुझे अपना जवाब हटाना चाहता है। – vinux

+0

धन्यवाद। आपका समाधान बहुत अच्छा है। बीटीडब्ल्यू हम 'लाइन' के लिए किंवदंती कैसे जोड़ सकते हैं। वास्तव में मदद की ज़रूरत है। – neversaint

+1

दो तरह से हम यह कर सकते हैं। एक अलग किंवदंती जोड़कर है और दूसरी तरफ बारप्लॉट से पौराणिक कथाएं लेती हैं और रेखा जोड़कर नई किंवदंती बनाती हैं। – vinux

1

बारप्लॉट में आप अपने एक्स, और वाई मानों के साथ एक मैट्रिक्स पास नहीं करते हैं, बल्कि आपकी ऊंचाइयों के साथ। यह समझ में नहीं आता है कि आप सभी dens_k0 आदि आइटम बनाते हैं और कभी उनका उपयोग नहीं करते हैं। आज़माएं ...

barplot(rbind(dens_k0, dens_k1, dens_k2, dens_k3, dens_k4, dens_k5), xlim=c(0,max(x)), ylim=c(0,max(emp_dens)), space=0.1, lwd=5, xlab="Value of X", ylab="Densities", font.main=1) 
lines(emp_dens,lty=1,col="red") 

सावधानीपूर्वक जांच करें कि मैंने भविष्य के संदर्भ के लिए क्या पारित किया है। आपको शायद इसे दूरस्थ रूप से पठनीय बनाने के लिए बारप्लॉट के पौराणिक तर्क को सेट करने की आवश्यकता है। यहां तक ​​कि आखिरी कुछ घनत्व बहुत कम हैं।

पौराणिक कथाओं को जोड़ने का एक आसान तरीका यह है कि आपके पास जो कुछ भी है, उसे केवल कुछ छोटे बदलाव करें।

barplot(rbind(dens_k0, dens_k1, dens_k2, dens_k3, dens_k4, dens_k5, 0), 
     col = c(grey(exp((0:5)/5)/exp(1)), 'red'), xlim=c(0,max(x)), ylim=c(0,max(emp_dens)), space=0.1, lwd=5, xlab="Value of X", ylab="Densities", font.main=1, 
     legend.text = c('k0', 'k1', 'k2', 'k3', 'k4', 'k5', 'dens curve'))