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

如何基于Pandas DataFrame绘制多值堆叠时间序列柱状图

解决方案

1. 数据预处理

你的数据包含多层索引结构,先将其整理为标准格式的DataFrame:

import pandas as pd

# 模拟读取你的数据(实际使用时可直接从文件读取)
data = """                               value      cumsum   price
0    2021-02-01 00:00:00    164.6136    164.6136  0.0216
     2021-02-01 00:00:00    163.8085    328.4221  0.0215
     2021-02-01 00:00:00    163.0466    491.4687  0.0214
     2021-02-01 00:00:00  14999.9925  15491.4612  0.0213
1    2021-02-01 00:00:10    164.6136    164.6136  0.0216
8634 2021-02-01 23:59:00  14999.9993  14999.9993  0.0221
8635 2021-02-01 23:59:10  14999.9993  14999.9993  0.0221
8636 2021-02-01 23:59:20  14999.9993  14999.9993  0.0221
8637 2021-02-01 23:59:30      0.0000      0.0000  0.0221
     2021-02-01 23:59:30  14999.9993  14999.9993  0.0221"""

# 解析数据并处理索引
df = pd.read_csv(pd.compat.StringIO(data), sep='\s+', header=0)
df['datetime'] = df.index.get_level_values(1)
df.reset_index(drop=True, inplace=True)
# 转换为时间格式
df['datetime'] = pd.to_datetime(df['datetime'])

2. 绘制匹配目标的图表

从你提供的示例图来看,核心是展示价格与对应累计量/数值的关联分布,以下是两种适配场景的实现:

场景1:时间维度下的价格-数值堆叠图

如果目标图是按时间展示不同价格对应的数值分布,可以用堆叠面积图:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 设置画布
fig, ax = plt.subplots(figsize=(12, 6))

# 按10分钟聚合,拆分不同价格的数值
minute_df = df.groupby([pd.Grouper(key='datetime', freq='10min'), 'price'])['value'].sum().unstack()
# 绘制堆叠面积图
minute_df.plot(kind='area', stacked=True, ax=ax, alpha=0.7)

# 格式化时间轴
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.xticks(rotation=45)

# 添加标签与标题
ax.set_xlabel('时间')
ax.set_ylabel('总数值')
ax.set_title('各时段不同价格对应的数值分布')

plt.tight_layout()
plt.show()

场景2:价格与累计量的关联图

如果目标图是展示价格和累计量的对应关系,可以用柱状+折线组合图:

fig, ax = plt.subplots(figsize=(10, 6))

# 按价格排序数据
sorted_df = df.sort_values('price')
# 绘制柱状图展示累计量
ax.bar(sorted_df['price'], sorted_df['cumsum'], width=0.0001, color='steelblue')
# 叠加折线图突出趋势
ax.plot(sorted_df['price'], sorted_df['cumsum'], color='darkred', linestyle='--')

# 添加标签与标题
ax.set_xlabel('价格')
ax.set_ylabel('累计量')
ax.set_title('价格与累计量对应关系')

plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:32