Одним из возможных решений является подмножество вашего набора данных для geom_line
и geom_point
, чтобы использовать только данные sim
и obs
соответственно.
Затем, если вы передадите shape = Type
в aes
, вы можете удалить точки для sim
данных в легенде, используя scale_shape_manual
:
(Примечание: я использовал * Функция 1013 * из пакета data.table
, поскольку я считаю ее более эффективной для большого набора данных, чем функция melt
reshape2
)
library(lubridate)
df$Date <- dmy(df$Date)
library(data.table)
dt.m <- melt(setDT(df),measure = list(c("Nitrate","Ammonium","DIP","Chla")), value.name = "Values", variable.name = "Element")
library(ggplot2)
ggplot(dt.m, aes(x = Date, y = Values, group = Type, color = Type, shape = Type))+
geom_line(data = subset(dt.m, Type == "sim"))+
geom_point(data = subset(dt.m, Type == "obs"))+
scale_shape_manual(values = c(16,NA))+
facet_wrap(~Element, scales = "free")