2013-04-05 10 views
15

Chciałbym użyć ggplot i faceting do skonstruowania szeregu wykresów gęstości pogrupowanych według współczynnika. Dodatkowo chciałbym utworzyć warstwę o innej gęstości na każdym z aspektów, który nie podlega ograniczeniom narzuconym przez aspekt.ggplot2: Czy istnieje sposób na nałożenie pojedynczego wykresu na wszystkie aspekty w ggplot?

Przykładowo aspektach działka będzie wyglądać następująco:

require(ggplot2) 
ggplot(diamonds, aes(price)) + facet_grid(.~clarity) + geom_density() 

a potem Proszę mieć następujący wykres jednego gęstości warstw na każdej ze ścianek:

ggplot(diamonds, aes(price)) + geom_density() 

Ponadto, czy ggplot z faceting najlepszym sposobem to zrobić, czy istnieje preferowana metoda?

Odpowiedz

18

Jednym ze sposobów osiągnięcia tego celu byłoby zrobić ramkę nowych danych diamonds2 który zawiera tylko kolumny price i następnie dwa geom_density() rozmowy - jeden, który będzie używać tylko oryginalnych diamonds i drugi, który wykorzystuje diamonds2. Podobnie jak w diamonds2 nie będzie kolumny clarity wszystkie wartości będą używane we wszystkich aspektach.

diamonds2<-diamonds["price"] 
ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
    geom_density(data=diamonds2,aes(price),colour="blue") 

enter image description here

UPDATE - jak sugeruje @BrianDiggs ten sam efekt można osiągnąć bez wprowadzania nowej ramki danych, ale przekształcając go wewnątrz geom_density().

ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
    geom_density(data=transform(diamonds, clarity=NULL),aes(price),colour="blue") 

Innym podejściem byłoby wykreślenie danych bez fasetowania. Dodaj dwa wywołania do geom_density() - w jednym dodaniu aes(color=clarity), aby uzyskać linie gęstości w różnych kolorach dla każdego poziomu clarity i pozostaw puste puste miejsce geom_density() - które doda ogólną linię czarnego zagęszczenia.

ggplot(diamonds,aes(price))+geom_density(aes(color=clarity))+geom_density() 

enter image description here

+0

Dziękuję za wielką odpowiedź. Gdybym miał dość reputacji, chciałbym przegłosować :) Pozdrawiam. – skleene

+0

Niewielka odmiana pierwszego podejścia: nie musisz tworzyć nazwanego "diamonds2" przed czasem. Możesz zadeklarować to w linii w argumencie danych do drugiej 'geom_density()': 'data = transform (diamonds, clarity = NULL)' –

+0

@BrianDiggs Thanks. Miałem też podobny pomysł po opublikowaniu odpowiedzi, ale postanowiłem odejść w ten sposób, aby pokazać, że inne dane nie mają tej kolumny i są bardziej ogólne (jeśli jest już dostępna inna ramka danych). –

Powiązane problemy