2015-08-26 266 views
0

我想从两个不同的数据框中绘制(在同一图上)两组数据与日期。两个数据帧对于两个测量中的每一个具有相同的确切日期。我想用不同的颜色在同一个图上绘制这两组数据。但是,我无法将它们放在同一张图上。 R已经将日期作为日期读取。我试过这个:在R ggplot中绘制多个数据系列

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

并且收到这个错误。

Error in add_ggplot(e1, e2, e2name) : 
    argument "e2" is missing, with no default 

我试过用ggplot函数代替qplot,但我甚至不能用这种方式绘制一个图。

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

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

请帮助。谢谢!

+0

你可以给我们您正在使用的一些样本数据。你想要一个数据中有哪些变量的线图? –

+1

您需要通过在'ggplot2'中添加图层来完成此操作,其中每个图层都有一个不同的数据集。但似乎你在使用基本的'ggplot()'语法时遇到了问题。确保你可以通过'ggplot()'建立基本图块,然后移动到多个图层 –

+0

欢迎来到SO。你真的需要提供你的数据,或者更好的代表性样本,以便我们能够重现你的问题。阅读[this](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610)。 – jlhoward

回答

0

由于您未提供任何数据(请在将来这样做),下面是一个用于演示解决方案的组合数据集。至少有两种方法可以做到这一点:正确的方式和错误的方式。在这个非常简单的情况下,两者都会产生相同的结果

# 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被设计为使用“长”格式的数据。这意味着所有的y值(浓度)都在一列中,并且有单独的列标识相应的类别(在您的案例中为“NO3”或“DIS.O2”)。因此,首先我们根据日期合并两个数据集,然后使用melt(...)将“wide”(分隔列中的类别)转换为“long”格式。然后,我们让ggplot担心的传说,颜色等

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) 

“错误”的方式来做到这一点是通过使独立的呼叫geom_point(...)每一层。在您的具体情况下,这可能会更简单,但从长远来看,最好使用其他方法。

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