2012-05-15 52 views
6

Tôi muốn làm cho ô được xếp chồng lên nhau sau đây với đường cong đường kẻ.Barplot xếp chồng lên nhau cùng với Đường thẳng trong R

enter image description here

Nhưng tại sao mã sau đây không hoạt động? Cách thích hợp để làm điều đó là gì?

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

Bạn có thể thử nó trong gglot2: http://had.co.nz/ggplot2/geom_histogram.html –

+6

1 để minh hoạ. –

Trả lời

2

dens_all_k chỉ chứa tóm tắt tổng hợp. Nếu bạn đang tìm kiếm các barplot trong hình ảnh bạn cần phải cung cấp tất cả các thông tin k. Hãy thử đoạn mã sau.

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"); 

Đầu ra là enter image description here

+1

Vui lòng cho tôi biết nếu có ai trong các bạn muốn tôi xóa câu trả lời của tôi. – vinux

+0

cảm ơn. Giải pháp của bạn là tuyệt vời. BTW làm thế nào chúng ta có thể thêm chú thích cho 'dòng'. Giúp thực sự cần thiết. – neversaint

+1

Hai cách chúng ta có thể làm điều này. một là bằng cách thêm chú giải riêng biệt và cách khác là đưa ra phần chú giải từ cốt truyện và tạo huyền thoại mới bằng cách thêm dòng. – vinux

1

Trong barplot bạn không chuyển ma trận với giá trị x và y mà chỉ là chiều cao của bạn. Nó không có ý nghĩa rằng bạn làm cho tất cả các mục dens_k0 vv và không bao giờ sử dụng chúng. Hãy thử ...

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") 

Kiểm tra cẩn thận những gì tôi đã chuyển đến đó để tham khảo trong tương lai. Bạn có thể cần phải đặt đối số chú thích của barplot để làm cho nó có thể đọc được từ xa. Ngay cả khi nó là những densitites cuối cùng rất rất nhỏ.

Cách dễ dàng để thêm chú thích là chỉ thực hiện một vài thay đổi nhỏ cho những gì bạn có.

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')) 
Các vấn đề liên quan