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

如何用Matplotlib为时间序列数据按类别设置折线/散点图颜色

我来帮你搞定这个问题!其实要实现按类别给时间序列点上色很简单,我们可以把类别数据整合到DataFrame里,然后用Matplotlib的scatter函数(或者结合折线图)来实现。下面给你一步步的解决方案:

解决方案

1. 先把类别数据整合到DataFrame中

把类别数组加到DataFrame里,能让后续绘图时更方便地关联数据,不用分开处理两个独立的结构:

import pandas as pd
import matplotlib.pyplot as plt

# 模拟你提供的示例数据
dates = pd.date_range(start='2018-07-04', periods=9)
values = [1.25, 2.15, 1.75, 1.95, 2.2, 2.0, 1.8, 2.3, 1.7]
classes = [0, 1, 2, 0, 1, 1, 2, 1, 0]

# 构造DataFrame并加入类别列
df = pd.DataFrame({'date': dates, 'value': values})
df['class'] = classes

2. 绘制按类别上色的散点图

直接使用plt.scatter,通过c参数指定类别列,就能自动给不同类别的点分配差异化颜色:

plt.figure(figsize=(10, 6))
# 绘制散点图,c指定颜色依据的列,cmap可选颜色映射方案
scatter = plt.scatter(df['date'], df['value'], c=df['class'], cmap='viridis', s=100)

# 添加颜色图例,方便区分各类别
plt.legend(handles=scatter.legend_elements()[0], labels=['Class 0', 'Class 1', 'Class 2'])
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Scatter Plot Colored by Class')
plt.xticks(rotation=45)  # 旋转日期标签避免重叠
plt.tight_layout()  # 自动调整布局
plt.show()

你可以替换cmap参数的值来切换颜色风格,比如'coolwarm'、'tab10'都是不错的选择,s参数用来调整点的大小,按需修改即可。

3. 绘制带颜色点的折线图

如果想要保留折线的连贯性来展示整体趋势,同时让每个数据点按类别上色,可以先绘制基础折线,再叠加散点:

plt.figure(figsize=(10, 6))
# 先画一条浅色的基础折线,保证趋势的连贯性
plt.plot(df['date'], df['value'], color='gray', linestyle='-', linewidth=1, alpha=0.7)

# 叠加按类别上色的散点
scatter = plt.scatter(df['date'], df['value'], c=df['class'], cmap='viridis', s=100)

# 添加图例和标签
plt.legend(handles=scatter.legend_elements()[0], labels=['Class 0', 'Class 1', 'Class 2'])
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Line Plot with Class-Colored Points')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

这种方式既保留了折线的趋势展示,又能通过点的颜色清晰区分每个数据点的类别,应该就是你想要的效果。

如果需要折线本身按类别分段上色(不同类别的线段颜色不同),可以再告诉我,我再给你补充对应的实现方法~

内容的提问来源于stack exchange,提问作者Felipe Oriani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:07:37