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

如何用Matplotlib将含多数据序列的多张图表绘制成子图

实现方法

核心逻辑

遍历数据列的同时,分别在两个预创建的子图对象上绘制对应数据集的同列数据即可,同时需要提前处理原始数据中的字符串格式缺失值,避免绘图异常。

完整可运行代码

import pandas as pd
import matplotlib.pyplot as plt

# 原始数据定义
df1 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
    'index':[0, 1, 2, 3, 4], 
    '02K W':[3.5, 0.1, 3, 'nan', 0.2], 
    '03K W':[4.2, 5.2, 2.5, 3.0, 0.6], 
    '04K W':[1.5, 2.6, 8.2, 4.2, 5.3]}) 

df2 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
    'index':[0, 1, 2, 3, 4], 
    '02K W':[3, 'nan', 5, 3, 5.2], 
    '03K W':[2.1, 2.9, 2.5, 3.9, 6.7], 
    '04K W':[1.8, 6.2, 5, 2.5, 3.7]}) 

# 数据预处理:统一转换日期格式、处理字符串类型的缺失值
for df in [df1, df2]:
    df['Date'] = pd.to_datetime(df['Date'])
    # 把数值列的字符串'nan'转为标准空值、转换为浮点类型
    for col in ['02K W', '03K W', '04K W']:
        df[col] = pd.to_numeric(df[col], errors='coerce')

# 创建1行2列的子图,可自行调整画布尺寸
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# 遍历所有数值列,分别在两个子图中绘图
for col in ['02K W', '03K W', '04K W']:
    ax1.plot(df1['Date'], df1[col], label=col)
    ax2.plot(df2['Date'], df2[col], label=col)

# 可选美化配置,避免内容重叠
ax1.set_title('df1数据趋势')
ax1.legend()
ax1.tick_params(axis='x', rotation=45)

ax2.set_title('df2数据趋势')
ax2.legend()
ax2.tick_params(axis='x', rotation=45)

# 自动调整子图间距
plt.tight_layout()
plt.show()

关键说明

  • 数据预处理:原始数据中的'nan'为字符串格式,matplotlib无法识别为缺失值,通过pd.to_numeric的errors='coerce'参数可以自动将非法值转为标准空值,保证绘图正常
  • 子图关联:你创建的ax1、ax2是两个独立的子图实例,循环过程中直接调用两个实例的plot方法即可分别在对应子图绘制数据,不需要额外做y轴绑定
  • 优化项:示例中添加了标题、图例、x轴刻度旋转和自动布局调整,避免内容重叠影响展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:03