如何用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
相关产品推荐
相关产品推荐

