2015-02-24 10 views
5

Gibt es eine Möglichkeit, die geom_density() Funktion von ggplot2 das Verhalten von ggvis layer_densities() nachzuahmen? Das heißt, machen Sie es so p1 sieht wie p3 (siehe unten) ohne den Anruf zu xlim() aus? Insbesondere bevorzuge ich die Ansicht, die die Schwänze der Dichtekurve glättet.Anpassen von x-Grenzen xlim() in ggplot2 geom_density() zum Nachahmen von ggvis layer_densities() Verhalten

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 Ausgang: p1

ggplot2 "default": p2

ggplot2 "gewünschte": p3

Hinweis: Man kann ggvis imitieren machen ggplot2 über die folgende (mit trim=TRUE), aber ich würde gerne die andere Richtung gehen ...

+0

Warum das xlim-Argument vermeiden? Ist Ihre Sorge, dass die Lösung nicht allgemein genug ist? –

+0

@ RomanLuštrik richtig - Ich bin auf der Suche nach einer allgemeineren Lösung. – JasonAizkalns

Antwort

6

Wie wäre es mit dem Aufruf xlim, aber mit Grenzen, die programmgesteuert definiert sind?

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

enter image description here

Der Nachteil ist, mit doppelter Dichte Schätzung obwohl, so dass im Auge behalten.