2011-08-24 53 views
9

Tôi có câu hỏi có thể tương tự như Fitting a density curve to a histogram in R. Sử dụng qplot Tôi đã tạo 7 biểu đồ bằng lệnh này:Làm thế nào để thêm đường cong gaussian vào biểu đồ được tạo bằng qplot?

Đối với mỗi lát, tôi muốn thêm đường cong gaussian phù hợp. Khi tôi cố gắng sử dụng phương pháp lines(), tôi gặp lỗi:

Error in plot.xy(xy.coords(x, y), type = type, ...) : 
plot.new has not been called yet 

Lệnh để thực hiện chính xác là gì?

+1

Bạn không thể trộn lẫn các chức năng đồ họa cơ sở ('dòng()' vv) với đồ họa lưới như được sử dụng bởi ** gpplot2 ** và ** lưới ** gói. –

Trả lời

14

Bạn đã thử stat_function chưa?

+ stat_function(fun = dnorm) 

Có thể bạn sẽ muốn vẽ biểu đồ bằng cách sử dụng aes(y = ..density..) để vẽ giá trị mật độ thay vì đếm.

Rất nhiều thông tin hữu ích có thể được tìm thấy trong câu hỏi this, bao gồm một số lời khuyên về cách vẽ các đường cong bình thường khác nhau trên các khía cạnh khác nhau.

Dưới đây là một số ví dụ:

dat <- data.frame(x = c(rnorm(100),rnorm(100,2,0.5)), 
        a = rep(letters[1:2],each = 100)) 

Overlay mật độ bình thường duy nhất trên mỗi khía cạnh:

ggplot(data = dat,aes(x = x)) + 
    facet_wrap(~a) + 
    geom_histogram(aes(y = ..density..)) + 
    stat_function(fun = dnorm, colour = "red") 

enter image description here

Từ câu hỏi tôi liên kết với, tạo ra một khung dữ liệu riêng biệt với các đường cong bình thường khác nhau:

grid <- with(dat, seq(min(x), max(x), length = 100)) 
normaldens <- ddply(dat, "a", function(df) { 
    data.frame( 
    predicted = grid, 
    density = dnorm(grid, mean(df$x), sd(df$x)) 
) 
}) 

Và âm mưu chúng riêng rẽ sử dụng geom_line:

ggplot(data = dat,aes(x = x)) + 
    facet_wrap(~a) + 
    geom_histogram(aes(y = ..density..)) + 
    geom_line(data = normaldens, aes(x = predicted, y = density), colour = "red") 

enter image description here

+0

Tôi rất mới bắt đầu trong R, chỉ cần có nó trong vài ngày. Tôi sẽ xem xét nó, cảm ơn gợi ý! – mkk

+0

Muito Bom! Tôi ajudou horrores !!!! – Jean

5

ggplot2 sử dụng một mô hình đồ họa khác với đồ họa cơ bản. (Mặc dù bạn có thể sử dụng grid đồ họa với nó, cách tốt nhất là thêm một layer mới stat_function đến cốt truyện. Mã ggplot2 là như sau.

Lưu ý rằng tôi không thể có được điều này để làm việc sử dụng qplot, nhưng chuyển đổi sang ggplot là hợp lý straighforward, sự khác biệt quan trọng nhất là dữ liệu của bạn phải ở định dạng data.frame

Cũng lưu ý các bản đồ rõ ràng của y thẩm mỹ aes=aes(y=..density..)) -. đây là slighly khác thường nhưng mất stat_function kết quả và ánh xạ nó vào dữ liệu:

library(ggplot2) 
data <- data.frame(V1 <- rnorm(700), V2=sample(LETTERS[1:7], 700, replace=TRUE)) 
ggplot(data, aes(x=V1)) + 
    stat_bin(aes(y=..density..)) + 
    stat_function(fun=dnorm) + 
    facet_grid(V2~.) 

enter image description here

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