2015-02-24 21 views
5

Có cách nào để làm cho hàm ggplot2's geom_density() bắt chước hành vi của ggvis's layer_densities()? Tức là, làm cho nó như vậy p1 trông giống như p3 (xem bên dưới) mà không cần gọi tới xlim()? Cụ thể, tôi thích chế độ xem làm mịn các đường cong của đường cong mật độ.Điều chỉnh x giới hạn xlim() trong ggplot2 geom_density() để bắt chước hành vi ggvis layer_densities()

library(ggvis) 
library(ggplot2) 

faithful %>% 
    ggvis(~waiting) %>% 
    layer_densities(fill := "green") -> p1 

ggplot(faithful, aes(x = waiting)) + 
    geom_density(fill = "green", alpha = 0.2) -> p2 

ggplot(faithful, aes(x = waiting)) + 
    geom_density(fill = "green", alpha = 0.2) + 
    xlim(c(30, 110)) -> p3 

p1 
p2 
p3 

ggvis Output: p1

ggplot2 "mặc định": p2

ggplot2 "mong muốn": p3

Lưu ý: Người ta có thể làm cho ggvis bắt chước ggplot2 qua như sau (sử dụng trim=TRUE), nhưng tôi muốn đi theo một hướng khác ...

faithful %>% 
    compute_density(~waiting, trim=TRUE) %>% 
    ggvis(~pred_, ~resp_) %>% 
    layer_lines() 
+0

Tại sao tránh đối số xlim? Bạn có lo ngại rằng giải pháp sẽ không đủ chung? –

+0

@ RomanLuštrik đúng - Tôi đang tìm một giải pháp tổng quát hơn. – JasonAizkalns

Trả lời

6

Làm thế nào để gọi xlim, nhưng với giới hạn được xác định theo chương trình?

l <- density(faithful$waiting) 
ggplot(faithful, aes(x = waiting)) + 
    geom_density(fill = "green", alpha = 0.2) + 
    xlim(range(l$x)) 

enter image description here

Nhược điểm là đánh giá mật độ kép tuy nhiên, để giữ cho rằng trong tâm trí.

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