2015-08-26 97 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")