如何用df.plot将多个DataFrame对应列绘制到同一子图?
高效批量绘制同名列子图的简洁方案
问题描述
我有60个结构完全相同的DataFrame,每个都包含6列。想要将所有DataFrame的同名列绘制在同一个图的对应子图中(例如所有Data1列放在第一个子图)。使用df.plot循环绘制时会生成多个独立图,目前通过手动循环axes对象实现需求,希望找到更简洁的实现方式,且不需要将每个DataFrame单独放在子图中。
示例代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 生成示例数据 df1 = pd.DataFrame(np.random.rand(50,6)*100, columns = ['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6']) df2 = pd.DataFrame(np.random.rand(50,6)*100, columns = ['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6']) df3 = pd.DataFrame(np.random.rand(50,6)*100, columns = ['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6']) df = [df1,df2,df3] # 原方法:生成多个独立图 for frame in df: frame.plot(subplots = True, layout = (2,3)) # 当前手动实现方式 fig, ax = plt.subplots(2,3) for frame in df: ax[0,0].plot(frame['Data1']) ax[0,1].plot(frame['Data2']) # 以此类推,需要手动写每个子图的绘制逻辑
简洁解决方案
通过按列名匹配子图的方式,避免手动指定每个axes的位置,代码更简洁且扩展性强:
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 生成示例数据(实际场景替换为你的60个DataFrame列表) df1 = pd.DataFrame(np.random.rand(50,6)*100, columns = ['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6']) df2 = pd.DataFrame(np.random.rand(50,6)*100, columns = ['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6']) df3 = pd.DataFrame(np.random.rand(50,6)*100, columns = ['Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6']) df_list = [df1, df2, df3] # 创建2行3列的子图布局 fig, axes = plt.subplots(2, 3, figsize=(12, 8)) # 将二维axes数组展平为一维,方便和列名一一对应 axes_flat = axes.flatten() # 获取统一的列名列表 cols = df_list[0].columns # 遍历列名和对应子图 for col, ax in zip(cols, axes_flat): # 把所有DataFrame的当前列画到对应子图 for df in df_list: ax.plot(df[col]) ax.set_title(col) # 设置子图标题为列名 # 自动调整子图间距 plt.tight_layout() plt.show()
方案优势
- 无需手动指定
ax[0,0]这类子图位置,列数或布局调整时只需修改subplots的参数即可 - 循环逻辑清晰:先按列分配子图,再批量绘制所有DataFrame的对应列,60个DataFrame也能轻松处理
- 自动匹配列名和子图,减少重复代码,降低出错概率
内容的提问来源于stack exchange,提问作者Regina Phalange
相关产品推荐
相关产品推荐

