web-dev-qa-db-fra.com

ggplot combinant deux parcelles de data.frames différentes

Je veux combiner deux ggplots, de deux data.frames différents, en un complot. Vous trouverez ci-dessous le code. Je veux combiner les parcelles 1 et 2 ou les parcelles 3 et 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()

Cela doit être très facile à faire, mais de toute façon, je ne peux pas le faire fonctionner. Merci pour votre temps.

62
jeroen81

Comme Baptiste l'a dit, vous devez spécifier l'argument de données au niveau de la géographie. Non plus

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

ou

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

La seule solution qui a fonctionné pour moi était de définir l'objet de données dans geom_line au lieu de l'objet de base, ggplot.

Comme ça:

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

au lieu de

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

Plus d'infos ici

48
Andries

Vous pouvez prendre cette astuce pour utiliser uniquement qplot. Utiliser la variable interne $mapping. Vous pouvez même ajouter color = à vos tracés pour que cela soit également mis en correspondance, puis vos tracés combinés avec la légende et les couleurs automatiquement.

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