You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:25:27