2013-08-14 14 views
5

Czy można nakładać wiele wykresów stat_contour z ggplot2 przy użyciu danych z różnych ramek danych?Jak mogę nałożyć wiele wykresów stat_contour na tym samym wykresie za pomocą ggplot2?

Czytałem rozwiązania do nakładania różnych geomów, ale do tego szczególnie chcę użyć stat_contour.

Zmienne X i Y są takie same dla obu zestawów danych. Niektóre dane próbki do pracy z:

# some sample data 
require(ggplot2) 
require(reshape2) 

v1 <- melt(volcano) 
v2 <- v1 
v2$value <- v2$value*1.5 

Więc kreślenia każdy indywidualnie działa:

ggplot(v1, aes(x = Var1, y = Var2, z = value)) + 
+ stat_contour(aes(color = ..level..)) + scale_colour_gradient(low = "white", high="#ff6666") 

ggplot(v2, aes(x = Var1, y = Var2, z = value)) + 
+ stat_contour(aes(color = ..level..)) + scale_colour_gradient(low = "white", high="#A1CD3A") 

Czy istnieje jakiś sposób, aby nałożyć te wykresy gęstości na tym samym wykresie?

Próbowałem utworzyć zmienną czynnikową i przypisałem każdemu zestawowi inną wartość, a następnie ustawiłem je w stos, ale dostaję błąd, ponieważ mają one więcej niż jedną wartość dla każdego X i Y (Var 1 i Var2 tutaj).

Dziękuję za pomoc!

+0

powinien być w stanie dodać wiele 'geom_contour's na działce, ale nie będzie w stanie wykorzystać różne skale, tylko 1 skala jest dozwolone na estetyce na działce. Być może będziesz musiał wymyślić inne rozwiązanie do rozróżniania między dwoma zestawami danych. –

Odpowiedz

7

Oto kilka opcji nakładania dwóch zestawów danych konturów w ggplot2. Jednym znaczącym zastrzeżeniem (jak zauważył @Drew Steen) jest to, że nie możesz mieć dwóch oddzielnych skal colour na tym samym wykresie.

# Add category column to data.frames, then combine. 
v1$category = "A" 
v2$category = "B" 
v3 = rbind(v1, v2) 

p1 = ggplot(v3, aes(x=Var1, y=Var2, z=value, colour=category)) + 
    stat_contour(binwidth=10) + 
    theme(panel.background=element_rect(fill="grey90")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 1") 

p2 = ggplot(v3, aes(x=Var1, y=Var2, z=value, colour=category)) + 
    stat_contour(aes(alpha=..level..), binwidth=10) + 
    theme(panel.background=element_rect(fill="white")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 2") 

p3 = ggplot(v3, aes(x=Var1, y=Var2, z=value, group=category)) + 
    stat_contour(aes(color=..level..), binwidth=10) + 
    scale_colour_gradient(low="white", high="#A1CD3A") + 
    theme(panel.background=element_rect(fill="grey50")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 3") 

p4 = ggplot(v3, aes(x=Var1, y=Var2, z=value, linetype=category)) + 
    stat_contour(aes(color=..level..), binwidth=10) + 
    scale_colour_gradient(low="white", high="#A1CD3A") + 
    theme(panel.background=element_rect(fill="grey50")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 4") 

library(gridExtra) 
ggsave(filename="plots.png", height=8, width=10, 
     plot=arrangeGrob(p1, p2, p3, p4, nrow=2, ncol=2)) 
  • Wykres 1: Wykres dwie warstwy w różnych kolorach stałych z aes(colour=category)
  • działki 2: Lista ..level.. pomocą przejrzystości alfa. Mimika posiadająca dwa osobne gradienty kolorów.
  • Spis 3: Narysuj obie warstwy o tym samym gradiencie. Zachowaj warstwy odrębne za pomocą aes(group=category)
  • Wykres 4: Użyj gradientu pojedynczego koloru, ale rozróżnij warstwy za pomocą rodzaju linii.

enter image description here

+0

Dziękuję. To wydaje się być najbliższym możliwym rozwiązaniem wizualizacji, którą sobie wyobrażam. Dzięki za wprowadzenie pakietu "gridExtra", sprawdzę to. –

Powiązane problemy