ggplot绘制分组时间序列异常求助:多作物时序图不符预期
问题:为每种作物绘制全部14条独立时序曲线
问题背景
需要基于现有数据集绘制时间序列图,目标是展示全部14条时序曲线,且每条曲线使用独特颜色。但通过melt重塑数据后,用ggplot绘制的结果仅为每种作物生成一条曲线,不符合预期。
现有代码
meltd = melt(mds,id.vars=c("crop"),value.name="value", variable.name="Date" ) meltd = meltd %>% mutate(across('Date', str_replace, '_', ' ')) %>% mutate(Date = paste0("01 ", str_to_title(Date))) %>% mutate(Date = as.Date(Date, format= "%d %b %y")) P<- meltd %>% ggplot(aes(x=Date, y=value, group = crop, colour = crop))+ geom_line() + labs(y= "VV", x = "Date")
问题原因
现有代码仅以crop作为分组依据,ggplot会将同一作物的所有样本数据点按日期合并后连线,导致每种作物只显示一条汇总曲线,而非每条样本对应的独立时序曲线。
修正方案
需要为每条时序曲线(即数据集中的每一行)添加唯一标识,以此作为分组依据,确保每条曲线独立绘制。
修正后代码
# 加载依赖包 library(reshape2) library(dplyr) library(stringr) library(ggplot2) # 为每行数据添加唯一曲线ID,标识每条独立时序 mds <- mds %>% mutate(curve_id = row_number()) # 重塑数据,保留作物类型和曲线ID作为分组变量 meltd <- melt(mds, id.vars = c("crop", "curve_id"), value.name = "value", variable.name = "Date") # 日期格式转换(保留原有逻辑) meltd <- meltd %>% mutate(Date = str_replace(Date, "_", " ")) %>% mutate(Date = paste0("01 ", str_to_title(Date))) %>% mutate(Date = as.Date(Date, format = "%d %b %y")) # 绘制全部14条独立曲线,每条曲线用独特颜色 P <- meltd %>% ggplot(aes(x = Date, y = value, group = curve_id, colour = factor(curve_id))) + geom_line(linewidth = 1) + labs(y = "VV", x = "Date", colour = "Curve ID") + # 优化图例标签,显示对应作物类型 scale_colour_discrete(labels = paste(mds$crop, mds$curve_id, sep = " - ")) # 查看绘图 print(P)
可选调整
如果希望同作物类型的曲线使用相同颜色,仅用线型区分不同样本,可修改绘图部分代码:
P <- meltd %>% ggplot(aes(x = Date, y = value, group = curve_id, colour = crop, linetype = factor(curve_id))) + geom_line(linewidth = 1) + labs(y = "VV", x = "Date", colour = "Crop Type", linetype = "Curve ID")
内容的提问来源于stack exchange,提问作者gis.rajan
相关产品推荐
相关产品推荐

