ggplot łączący dwa wykresy z różnych data.frames

81

Chcę połączyć dwa ggplots, z dwóch różnych data.frames, w jeden wykres. Poniżej znajdziesz kod. Chcę połączyć działkę 1 i 2 lub działkę 3 i 4.

df1 <- data.frame(p=c(10,8,7,3,2,6,7,8),
             v=c(100,300,150,400,450,250,150,400))
df2 <- data.frame(p=c(10,8,6,4), v=c(150,250,350,400))

plot1 <- qplot(df1$v, df1$p)
plot2 <- qplot(df2$v, df2$p, geom="step")

plot3 <- ggplot(df1, aes(v, p)) + geom_point()
plot4 <- ggplot(df2, aes(v, p)) + geom_step()

To musi być bardzo łatwe do zrobienia, ale jakoś nie mogę tego zmusić do działania. Dziękuję za Twój czas.

jeroen81
źródło
8
używając ggplot()składni, możesz określić dane do użycia dla każdej pojedynczej warstwy, np.geom_step(data=df2)
baptiste

Odpowiedzi:

78

Jak powiedział Baptiste, musisz określić argument danych na poziomie geom. Zarówno

#df1 is the default dataset for all geoms
(plot1 <- ggplot(df1, aes(v, p)) + 
    geom_point() +
    geom_step(data = df2)
)

lub

#No default; data explicitly specified for each geom
(plot2 <- ggplot(NULL, aes(v, p)) + 
      geom_point(data = df1) +
      geom_step(data = df2)
)
Richie Cotton
źródło
32
@ naught101 Najdalsze nawiasy to sztuczka, aby wydrukować wykres w tym samym wierszu, co jego przypisanie. Możesz użyć tej sztuczki również z innymi zmiennymi. (my_variable <- 1:5)jest czystszą wersją my_variable <- 1:5; my_variable.
Richie Cotton
62

Jedynym działającym rozwiązaniem dla mnie było zdefiniowanie obiektu danych w geom_line zamiast w obiekcie podstawowym, ggplot.

Lubię to:

ggplot() + 
geom_line(data=Data1, aes(x=A, y=B), color='green') + 
geom_line(data=Data2, aes(x=C, y=D), color='red')

zamiast

ggplot(data=Data1, aes(x=A, y=B), color='green') + 
geom_line() + 
geom_line(data=Data2, aes(x=C, y=D), color='red')

Więcej informacji tutaj

Andries
źródło
3

Możesz skorzystać z tej sztuczki, aby używać tylko qplot. Użyj zmiennej wewnętrznej $mapping. Możesz nawet dodać color = do swoich wykresów, aby zostały one również umieszczone w mapowaniu, a następnie Twoje wykresy zostaną automatycznie połączone z legendą i kolorami.

cpu_metric2 <- qplot(y=Y2,x=X1) 

cpu_metric1 <- qplot(y=Y1, 
                    x=X1, 
                    xlab="Time", ylab="%") 

combined_cpu_plot <- cpu_metric1 + 
  geom_line() +
  geom_point(mapping=cpu_metric2$mapping)+
  geom_line(mapping=cpu_metric2$mapping)
Alexander.Iljushkin
źródło
jak mogę umieścić dwa kolory stosując to podejście?
Wagner Jorge,
1
@WagnerJorge spróbuj czytać dokumenty qplot i dodaj kolor podczas inicjalizacji cpu_metric2, na przykład qplot(y=..., x=..., colour=...), a następnie dodaj kolor do wnętrzageom_line(mapping..., colour=...)
Alexander.Iljushkin