如何在R中为月度各周数据序列绘制带唯一颜色的多折线图
R语言多类别时间序列折线图实现方案
方案1:使用ggplot2实现(更推荐,自动分组配色)
你已加载ggplot2包,用该包绘制分组折线图无需手动循环添加每条线,可自动为每个类别分配唯一颜色,代码更简洁易维护。
第一步:数据预处理
首先需要将你读取的宽格式CSV数据转为长格式,同时处理日期列:
# 安装依赖包(首次运行执行即可) install.packages(c("ggplot2", "tidyr", "lubridate")) # 加载包 library(ggplot2) library(tidyr) library(lubridate) # 读取原始数据 GEE <- read.csv("GEE.CSV") # 转换日期列为日期格式,请将代码中的date替换为你实际的日期列名 GEE$date <- ymd(GEE$date) # 宽表转长表:除日期列外,其余列均转为类别维度 GEE_long <- pivot_longer(GEE, cols = -date, names_to = "category", values_to = "Crops")
第二步:绘制多折线图
ggplot(GEE_long, aes(x = date, y = Crops, color = category, group = category)) + # 折线+散点,对应原代码type="o"的效果 geom_line(linewidth = 1) + geom_point(size = 2) + # x轴按月份展示 scale_x_date(date_breaks = "1 month", date_labels = "%Y-%m") + # 图表标注设置 labs(x = "Month", y = "Crops", title = "Crops chart", color = "类别") + # 可选:手动指定每个类别的颜色,数量和类别数保持一致即可 # scale_color_manual(values = c("类别1" = "red", "类别2" = "blue", "类别3" = "green")) + theme_bw() + # x轴标签旋转45度避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1))
方案2:使用R基础绘图实现
如果偏好基础绘图语法,可按如下代码调整,自动生成唯一颜色对应不同类别:
library(lubridate) GEE <- read.csv("GEE.CSV") x <- ymd(GEE$date) # 提取所有类别列名(排除日期列) categories <- colnames(GEE)[-1] # 为每个类别生成唯一颜色 cols <- rainbow(length(categories)) # 绘制第一条折线 plot(x, GEE[[categories[1]]], type = "o", col = cols[1], xlab = "Month", ylab = "Crops", main = "Crops chart", xaxt = "n") # 循环绘制剩余所有折线 for(i in 2:length(categories)){ lines(x, GEE[[categories[i]]], type = "o", col = cols[i]) } # 自定义x轴按月显示 axis.Date(1, at = seq(min(x), max(x), by = "1 month"), format = "%Y-%m") # 添加图例 legend("topright", legend = categories, col = cols, lty = 1, pch = 1)
注意事项
- 若你CSV中的日期列名不是
date,需将代码中所有date替换为实际的列名 - 若需要固定某类别为特定颜色,可修改ggplot的
scale_color_manual参数,或基础绘图的cols向量取值 - 若生成的图表x轴标签重叠,可调整
theme(axis.text.x)中的角度参数
内容的提问来源于stack exchange,提问作者Mustafa Alhealy
相关产品推荐
相关产品推荐

