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

如何使用Matplotlib和Pandas基于UniqueID创建n系列堆叠图

按UniqueID绘制堆叠图的修改方法

要实现按UniqueID划分系列的堆叠图,核心是把每个UniqueID对应的Oil数据整理成独立的数值序列,传给stackplot作为不同的系列。下面是两种可行的修改方式:

方法一:数据透视法(推荐)

先通过透视将每个UniqueID转为单独的列,自动对齐日期索引,再传入stackplot:

import matplotlib.pyplot as plt
import pandas as pd

# 对数据做透视处理:Date为索引,UniqueID为列,Oil为值,缺失值补0
pivoted_df = df.pivot(index='Date', columns='UniqueID', values='Oil').fillna(0)

fig, ax = plt.subplots()
# 横轴用透视后的Date索引,数值部分传入所有列的数值
sp = ax.stackplot(pivoted_df.index, pivoted_df.T.values)

# 添加图例对应每个UniqueID
ax.legend(pivoted_df.columns, title='UniqueID')
plt.show()

方法二:分组遍历法

如果不想修改数据结构,可以直接按UniqueID分组,提取每个组的Oil序列后传入:

import matplotlib.pyplot as plt
import pandas as pd

fig, ax = plt.subplots()
# 按UniqueID分组
groups = df.groupby('UniqueID')

# 提取每个组的Oil数据,整理成列表
oil_series = [group['Oil'].values for _, group in groups]
# 取统一的日期轴(需确保所有组日期范围一致)
dates = df['Date'].unique()
dates.sort()

# 用*解包列表,传入stackplot作为多个系列
sp = ax.stackplot(dates, *oil_series)

# 添加图例
ax.legend(groups.groups.keys(), title='UniqueID')
plt.show()

关键注意点

  • stackplot要求每个系列对应一个独立的数值数组,因此必须将UniqueID对应的Oil数据拆分后传入。
  • 所有系列的日期轴必须对齐,否则堆叠会错位,透视法会自动处理日期对齐,是更省心的选择。

内容的提问来源于stack exchange,提问作者Jean. H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:07:24