2015-08-26 1 views
0

J'essaie de tracer (sur le même graphique) deux ensembles de données en fonction de la date à partir de deux trames de données différentes. Les deux trames de données ont les mêmes dates exactes pour chacune des deux mesures. Je voudrais tracer ces deux ensembles de données sur le même graphique, avec des couleurs différentes. Cependant, je ne peux pas les obtenir sur le même graphique du tout. R lit déjà la date comme date. J'ai essayé ceci:graphique de plusieurs séries de données dans R ggplot

qplot(date , NO3, data=qual.arn) 
+ qplot(qual.arn$date , qual.arn$DIS.O2, "O2(aq)" , add=T) 

et j'ai reçu cette erreur. J'ai essayé d'utiliser la fonction ggplot à la place de qplot, mais je ne pouvais même pas tracer un graphe de cette façon.

ggplot(date=qual.no3.s, aes(date,NO3)) 

Error: ggplot2 doesn't know how to deal with data of class uneval 

VEUILLEZ AIDER. Je vous remercie!

+0

pouvez-vous nous donner quelques exemples de données que vous travaillez. Vous voulez un tracé de ligne de qui vars dans les données? –

+1

vous devez le faire en ajoutant des couches dans 'ggplot2' où chaque couche a un ensemble de données différent. Mais il semble que vous ayez des problèmes avec la syntaxe 'ggplot()' de base. Assurez-vous que vous pouvez construire des tracés de base via 'ggplot()' avant de passer à plusieurs couches –

+0

Bienvenue sur SO. Vous avez vraiment besoin de fournir vos données, ou mieux encore un échantillon représentatif afin que nous puissions reproduire votre problème. Lisez [ceci] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610). – jlhoward

Répondre

0

Puisque vous n'avez fourni aucune donnée (veuillez le faire à l'avenir), voici un jeu de données inventées pour démontrer une solution. Il y a (au moins) deux façons de le faire: la bonne et la mauvaise façon. Les deux donnent des résultats équivalents dans ce cas très simple.

# set up minimum reproducible example 
set.seed(1)  # for reproducible example 
dates <- seq(as.Date("2015-01-01"),as.Date("2015-06-01"), by=1) 
df1 <- data.frame(date=dates, NO3=rpois(length(dates),25)) 
df2 <- data.frame(date=dates, DIS.O2=rnorm(length(dates),50,10)) 

ggplot est conçu pour utiliser les données en format "long". Cela signifie que toutes les valeurs y (les concentrations) sont dans une seule colonne, et qu'il y a une colonne séparée qui identifie la catégorie correspondante ("NO3" ou "DIS.O2" dans votre cas). Donc, d'abord, nous fusionnons les deux ensembles de données en fonction de la date, puis utilisez melt(...) pour convertir de "large" (catégories dans des colonnes séparées) en format "long". Ensuite, nous allons ggplot vous soucier des légendes, des couleurs, etc.

library(ggplot2) 
library(reshape2) # for melt(...) 
# The right way: combine the data-sets, then plot 
df.mrg <- merge(df1,df2, by="date", all=TRUE) 
gg.df <- melt(df.mrg, id="date", variable.name="Component", value.name="Concentration") 
ggplot(gg.df, aes(x=date, y=Concentration, color=Component)) + 
    geom_point() + labs(x=NULL) 

La meilleure façon de faire « mal » est en faisant des appels séparés à geom_point(...) pour chaque couche. Dans votre cas particulier, cela peut être plus simple, mais à long terme, il vaut mieux utiliser l'autre méthode.

# The wrong way: plot two sets of points 
ggplot() + 
    geom_point(data=df1, aes(x=date, y=NO3, color="NO2")) + 
    geom_point(data=df2, aes(x=date, y=DIS.O2, color="DIS.O2")) + 
    scale_color_manual(name="Component",values=c("red", "blue")) + 
    labs(x=NULL, y="Concentration")