2012-11-03 23 views
11

Tôi có ggplot nàySmoothing trong ggplot

ggplot(dt.1, aes(x=pctOAC,y=NoP, fill=Age)) + 
    geom_bar(stat="identity",position=position_dodge()) + 
    geom_smooth(aes(x=pctOAC,y=NoP, colour=Age), se=F, method="loess",show_guide = FALSE,lwd=0.7) + 
    theme(legend.position=c(.2,0.8)) 

enter image description here

dt1 <- structure(list(Age = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("o80", "u80"), class = "factor"), NoP = c(47L, 5L, 33L, 98L, 287L, 543L, 516L, 222L, 67L, 14L, 13L, 30L, 1L, 6L, 17L, 30L, 116L, 390L, 612L, 451L, 146L, 52L), pctOAC = c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)), .Names = c("Age", "NoP", "pctOAC"), row.names = c(NA, -22L), class = "data.frame") 

Tôi muốn có đường trơn hạn chế nằm ở trên không, có lẽ một cái gì đó tương tự như một mật độ hạt nhân. Trong thực tế, nếu tôi dữ liệu cơ bản, tôi mong đợi mật độ hạt nhân là chính xác những gì tôi muốn, nhưng tôi chỉ có dữ liệu tổng hợp. Có cách nào để làm điều này không? Tôi đã thử sử dụng method= khác nhau trong geom_smooth, nhưng tập dữ liệu nhỏ dường như ngăn chặn nó. Tôi tự hỏi về việc sử dụng stat_function nhưng tôi không có nhiều đầu mối về cách tiến hành tìm kiếm một hàm phù hợp để vẽ.

+0

Không có một geom_density ??? –

Trả lời

14

Một khả năng khác là sử dụng method="glm" với một đường cong spline và một liên kết log (tức là cũng đã cố gắng method="gam", nhưng điều chỉnh phức tạp tự động của nó muốn giảm wiggliness quá nhiều:

library(splines) 
ggplot(dt.1, aes(x=pctOAC,y=NoP, fill=Age)) + 
    geom_bar(stat="identity",position=position_dodge()) + 
    geom_smooth(aes(colour=Age), se=F, 
       method="glm", 
       formula=y~ns(x,8), 
       family=gaussian(link="log"), 
       show_guide = FALSE,lwd=0.7) + 
    theme(legend.position=c(.2,0.8)) 

enter image description here

+0

Thật tuyệt vời !!!!! +1 –

4

Làm thế nào về geom_density()?

ggplot(dt1, aes(x=pctOAC,y=NoP, colour=Age, fill=Age)) + 
    geom_bar(stat="identity",position=position_dodge()) + 
    geom_density(stat="identity", fill=NA) + 
    theme(legend.position=c(.2,0.8)) 

enter image description here

+1

Nó làm esn't nhìn như thế này là thực sự làm mịn ở tất cả? Tuy nhiên, ngay cả khi nó chỉ nội suy, có cách nào để thuyết phục 'ggplot2' để đánh giá nó ở các điểm trung gian, tương đương với đối số' n' trong 'mật độ' không? –

+0

khi nhìn lại tôi nghĩ 'stat_identity' không có ý nghĩa gì với' geom_density' –

Các vấn đề liên quan