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