2015-02-24 1 views
5

Есть ли способ сделать функцию gqplot2 geom_density() имитирующей поведение ggvis's layer_densities()? То есть, сделайте так, чтобы p1 выглядел как p3 (см. Ниже) без звонка в xlim()? В частности, я предпочитаю представление, которое сглаживает хвосты кривой плотности.Настройка x пределов xlim() в ggplot2 geom_density() для имитации поведения 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 Выход: p1

ggplot2 "по умолчанию": p2

ggplot2 "желательно": p3

Примечание: Можно сделать ggvis имитировать ggplot2 через следующее (используя trim=TRUE), но я хотел бы пойти в другом направлении ...

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

Зачем избегать аргумента xlim? Вы обеспокоены тем, что решение не будет достаточно общим? –

+0

@ RomanLuštrik correct - Я ищу более общее решение. – JasonAizkalns

ответ

6

Как насчет вызова xlim, но с ограничениями, которые определены программно?

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

enter image description here

Недостатком является оценка двойной плотности, хотя, так что имейте это в виду.

Смежные вопросы