Python:基于单X轴从DataFrame绘制多幅图表的问题
解决多DataFrame列的独立图表绘制问题
别担心,第一次发帖完全没问题!我来帮你搞定这个循环绘制独立图表的需求~
首先咱们先梳理下你当前代码的几个小问题:
- 你的DataFrame里X轴列名是
Time,但代码里写的是'System Time',这会导致找不到列的错误 - 默认的
data.plot()会把所有图绘制在同一个画布上,所以你看到的是叠加的图,而不是独立的3幅
下面是针对你的需求(支持成百列的循环实现)的可行解决方案:
完整代码示例
import pandas as pd import matplotlib.pyplot as plt # 读取数据(实际使用时替换成你的read_csv即可) data = pd.DataFrame({ 'Time': [0, 10, 20, 30], 'Pressure': [100, 105, 110, 106], 'Static Temperature': [50, 55, 59, 57], 'Stag Temperature': [75, 77, 81, 79] }) # 循环遍历所有需要作为Y轴的列(排除Time列) for y_col in data.columns[data.columns != 'Time']: # 创建新的画布,确保每个图表完全独立 plt.figure(figsize=(8, 5)) # 可根据需求调整图表大小 # 绘制折线图,指定X轴为Time,Y轴为当前循环的列 data.plot(x='Time', y=y_col, ax=plt.gca(), linewidth=2) # 设置图表标题和轴标签,提升可读性 plt.title(f'{y_col} vs Time', fontsize=14) plt.xlabel('Time', fontsize=12) plt.ylabel(y_col, fontsize=12) # 自动调整布局,避免标签被截断 plt.tight_layout() # 如果需要批量保存图表,取消下面注释即可,文件名自动用列名命名 # plt.savefig(f'{y_col}_vs_time.png', dpi=150) # 显示当前图表(交互式环境下会弹出独立窗口) plt.show()
代码关键点解释
- 独立画布:每次循环调用
plt.figure(),会创建一个全新的绘图窗口,确保每幅Y轴列的图表都是分开的 - 过滤Y轴列:用
data.columns[data.columns != 'Time']排除X轴的Time列,避免重复绘制无效图表 - 自定义样式:添加标题、轴标签、调整线条宽度和图表尺寸,让成百个图表都保持清晰易读的风格
- 批量保存适配:如果要处理几百列,
plt.savefig()可以自动用列名命名保存的图片,方便后续统一查看
额外优化建议
如果你的DataFrame有几百列,还可以做这些适配:
- 关闭交互式显示:注释掉
plt.show(),只保留plt.savefig(),避免弹出几百个窗口 - 设置统一绘图风格:比如用
plt.style.use('seaborn-v0_8')来设置美观的默认样式 - 调整图表尺寸:根据你的需求修改
figsize参数,确保小图表也能看清数据趋势
内容的提问来源于stack exchange,提问作者Edward S
相关产品推荐
相关产品推荐

