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

Python多类别组合子图绘制求助:三类折线子图布局需求

解决方案:按要求绘制多子图折线图

先整理好你的示例数据,我们用pandas处理数据、matplotlib实现指定的子图布局:

Time, Type1, Type2, Amount 
0, A, Red, 1000
1, A, Red, 1002
2, A, Red, 1003
0, B, Blue, 50
1, B, Blue, 54
2, B, Blue, 60
0, A, Green, 89
1, A, Green, 90
2, A, Green, 100

完整代码实现

import pandas as pd
import matplotlib.pyplot as plt

# 加载数据,也可以直接用字符串读取:pd.read_csv(pd.compat.StringIO("上面的csv内容"))
data = pd.read_csv("your_data.csv")

# 创建子图布局:先做2行2列的网格,再把第二行合并为一个子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))
ax3 = fig.add_subplot(212)
# 隐藏第二行原有的空轴
axes[1,0].axis('off')
axes[1,1].axis('off')

# --- 子图1:Type1类别数据 ---
ax1 = axes[0,0]
for name, group in data.groupby('Type1'):
    ax1.plot(group['Time'], group['Amount'], label=f'Type1={name}', marker='o')
ax1.set_title('Type1 类别数据')
ax1.set_xlabel('Time')
ax1.set_ylabel('Amount')
ax1.legend()
ax1.grid(True)

# --- 子图2:Type2类别数据 ---
ax2 = axes[0,1]
for name, group in data.groupby('Type2'):
    ax2.plot(group['Time'], group['Amount'], label=f'Type2={name}', marker='s')
ax2.set_title('Type2 类别数据')
ax2.set_xlabel('Time')
ax2.set_ylabel('Amount')
ax2.legend()
ax2.grid(True)

# --- 子图3:Type1与Type2组合数据 ---
for (t1, t2), group in data.groupby(['Type1', 'Type2']):
    ax3.plot(group['Time'], group['Amount'], label=f'{t1}-{t2}', marker='^')
ax3.set_title('Type1 + Type2 组合数据')
ax3.set_xlabel('Time')
ax3.set_ylabel('Amount')
ax3.legend()
ax3.grid(True)

# 调整间距避免标题重叠
plt.tight_layout()
plt.show()

关键说明

  • 布局实现:先创建2×2的基础网格,再添加跨两列的子图作为第三个图,隐藏第二行的空轴,完美匹配你要的「前两个并排、第三个在下方」的样式。
  • 数据分组:用pandas.groupby分别按Type1、Type2、[Type1, Type2]分组,遍历每组绘制折线,自动区分不同类别。
  • 样式优化:添加标记点、网格、图例,调整布局避免元素重叠,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:41:19