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()

Это должно быть очень легко сделать, но почему-то я не могу заставить это работать. Спасибо за ваше время.

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

Ответы:

78

Как сказал Батист, вам нужно указать аргумент данных на уровне geom. Или

#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')

Больше информации здесь

Andries
источник
3

Вы можете воспользоваться этим трюком, чтобы использовать только qplot. Используйте внутреннюю переменную $mapping. Вы даже можете добавить цвет = к своим графикам, чтобы он тоже был помещен в отображение, а затем ваши графики автоматически объединяются с легендой и цветами.

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)
Александр Илюшкин
источник
как я могу поставить два цвета, используя этот подход?
Wagner Jorge
1
@WagnerJorge попробуй прочитать qplot docs и добавить цвет при инициализации cpu_metric2, например qplot(y=..., x=..., colour=...), затем добавить цвет внутриgeom_line(mapping..., colour=...)
Александр