ggplot, що поєднує два графіки з різних data.frames


81

Я хочу об'єднати два ggplots, з двох різних data.frames, в одну ділянку. Нижче ви знайдете код. Я хочу поєднати ділянки 1 і 2 або ділянки 3 і 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()

Це має бути дуже легко зробити, але я якось не можу змусити це працювати. Дякую за ваш час.


8
використовуючи ggplot()синтаксис, ви можете вказати дані, які використовуватимуться для кожного окремого шару, наприкладgeom_step(data=df2)
baptiste 02

Відповіді:


78

Як сказав Баптист, вам потрібно вказати аргумент даних на рівні геомагнітоли. Або

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

або

#No default; data explicitly specified for each geom
(plot2 <- ggplot(NULL, aes(v, p)) + 
      geom_point(data = df1) +
      geom_step(data = df2)
)

31
@ naught101 Найкращі дужки - це фокус, щоб зробити графік друком у тому самому рядку, що і його призначення. Ви можете використовувати цей фокус і з іншими змінними. (my_variable <- 1:5)є більш чистою версією my_variable <- 1:5; my_variable.
Richie Cotton,

62

Єдиним робочим рішенням для мене було визначити об’єкт даних у geom_line замість базового об’єкта ggplot.

Подобається це:

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

замість

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

Більше інформації тут


3

Ви можете скористатися цим фокусом, щоб використовувати лише qplot. Використовуйте внутрішню змінну $mapping. Ви навіть можете додати color = до своїх графіків, щоб це також було поміщено у відображення, а потім ваші графіки автоматично поєднуються з легендою та кольорами.

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)

як я можу нанести два кольори, використовуючи цей підхід?
Вагнер Хорхе

1
@WagnerJorge спробуйте прочитати документи qplot і додати колір при ініціалізації cpu_metric2, наприклад qplot(y=..., x=..., colour=...), потім додати колір всерединуgeom_line(mapping..., colour=...)
Олександр.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.