2012-09-12 16 views
11

Tôi muốn biết geom_density() chính xác là gì, vì vậy tôi biện minh cho biểu đồ và nếu có cách nào để trích xuất hàm hoặc điểm tạo ra cho mỗi đường cong được vẽ.R - Thuật toán nào sử dụng geom_density() và cách trích xuất các điểm/phương trình đường cong?

Cảm ơn

+0

tôi thấy stat_density rằng() cho phép bạn thiết lập các thông số. Vì vậy, có lẽ đó là câu trả lời phần đầu tiên. Vẫn muốn biết nếu phương trình hoặc điểm có thể được trích xuất. – unixsnob

Trả lời

18

get("compute_group", ggplot2::StatDensity) (hay, trước đây, get("calculate", ggplot2:::StatDensity)) sẽ giúp bạn có được thuật toán sử dụng để tính mật độ. (Tại gốc, đó là một cuộc gọi đến density() với kernel="gaussian" mặc định.)

Những điểm được sử dụng trong cốt truyện được vô hình được trả về bởi print.ggplot(), vì vậy bạn có thể truy cập chúng như thế này:

library(ggplot2) 
m <- ggplot(movies, aes(x = rating)) 
m <- m + geom_density() 
p <- print(m) 
head(p$data[[1]], 3) 
#   y  x density scaled count PANEL group ymin  ymax 
# 1 0.0073761 1.0000 0.0073761 0.025917 433.63  1  1 0 0.0073761 
# 2 0.0076527 1.0176 0.0076527 0.026888 449.88  1  1 0 0.0076527 
# 3 0.0078726 1.0352 0.0078726 0.027661 462.81  1  1 0 0.0078726 


## Just to show that those are the points you are after, 
## extract and use them to create a lattice xyplot 
library(gridExtra) 
library(lattice) 
mm <- xyplot(y ~x, data=p$data[[1]], type="l") 

enter image description here

3

Như được đề xuất trong các câu trả lời khác, bạn có thể truy cập các điểm ggplot bằng cách sử dụng print.ggplot(). Tuy nhiên, mã print() cũng in đối tượng ggplot, có thể không được mong muốn.

Bạn có thể nhận được trích xuất các dữ liệu đối tượng ggplot, mà không in cốt truyện, sử dụng ggplot_build():

library(ggplot2) 
library(ggplot2movies) 

m <- ggplot(movies, aes(x = rating)) 
m <- m + geom_density() 
p <- ggplot_build(m) # <---- INSTEAD OF `p <- print(m)` 
head(p$data[[1]], 3) 
#    y  x  density  scaled count  n PANEL group ymin 
# 1 0.007376115 1.000000 0.007376115 0.02591684 433.6271 58788  1 -1 0 
# 2 0.007652653 1.017613 0.007652653 0.02688849 449.8842 58788  1 -1 0 
# 3 0.007872571 1.035225 0.007872571 0.02766120 462.8127 58788  1 -1 0 


# Just to show that those are the points you are after, extract and use them 
# to create a lattice xyplot 
library(lattice) 
m2 <- xyplot(y ~x, data=p$data[[1]], type="l") 

library(gridExtra) 
grid.arrange(m, m2, nrow=1) 

enter image description here

+1

Cảm ơn, Megatron, đó chính xác là những gì tôi đang tìm kiếm! – Luis

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