データを提供していないため (今後提供してください)、解決策を示すために作成されたデータセットを以下に示します。これを行うには (少なくとも) 2 つの方法があります: 正しい方法と間違った方法です。この非常に単純なケースでは、どちらも同等の結果をもたらします。
# 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 値 (濃度) が 1 つの列にあり、対応するカテゴリ (この場合は "NO3" または "DIS.O2") を識別する別の列があることを意味します。そのため、最初に日付に基づいて 2 つのデータセットをマージし、次に使用melt(...)
して「ワイド」(別々の列のカテゴリ) から「ロング」形式に変換します。次に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")
