96 votes

ggplot combinant deux tracés de différents data.frames

Je souhaite combiner deux ggplots, à partir de deux data.frames différents, en un seul tracé. Ci-dessous vous trouverez le code. Je veux combiner les parcelles 1&2 ou les parcelles 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()

Cela doit être très facile à faire, mais je n'arrive pas à le faire fonctionner. Merci pour votre temps.

90voto

Richie Cotton Points 35365

Comme l'a dit Baptiste, vous devez spécifier l'argument data au niveau geom. Soit

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

78voto

Andries Points 915

La seule solution de travail pour moi consistait à définir l'objet de données dans le 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')

à la place 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

3voto

Flextra Points 964

Vous pouvez utiliser cette astuce pour n'utiliser que qplot. Utilisez la variable interne $mapping . Vous pouvez même ajouter color= à vos tracés afin qu'il soit également mis dans la cartographie, puis vos tracés seront automatiquement combinés avec la légende et les couleurs.

 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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X