Python Matplotlib:多数据集色图绘图及轴标签样式调整问题
多Excel数据绘图颜色重复及坐标轴样式调整解决方案
问题诊断
你的代码存在两个核心问题:
- 颜色重复且数据绘制错误:
- 外层遍历每个Excel文件时,每次都把所有已读取的文件数据合并成
all_frames,导致每次绘制的都是所有文件的混合数据,而非单个文件的独立数据集 - 内层嵌套了
range(n)循环,每个文件都重复绘制n次相同数据,颜色被反复覆盖,最终只显示最后一次循环的颜色
- 外层遍历每个Excel文件时,每次都把所有已读取的文件数据合并成
- 样式设置冗余:坐标轴和标签的样式在循环内重复设置,不仅无效还可能导致冲突
修正后的代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt import glob import os # 全局设置坐标轴样式,提前配置避免重复操作 plt.rcParams['axes.linewidth'] = 2 # 坐标轴边框粗细 plt.rcParams['font.weight'] = 'bold' # 全局字体加粗 # 获取并排序Excel文件路径 xlsx_files = glob.glob(r'C:\Users\path\**\*.xlsx') xlsx_files.sort() n = len(xlsx_files) print(f'待绘制文件数量: {n}') # 生成色图颜色列表,提前生成一次即可 colors = plt.cm.winter(np.linspace(0, 1, n)) # 遍历每个文件,绘制单个数据集 for idx, file in enumerate(xlsx_files): # 单独读取当前文件数据,无需合并所有文件 df = pd.read_excel(file) ph_loops = df[df['Read (V)'] == -0.5] x = ph_loops['Write (V)'] y = ph_loops['ph0 (o)'] # 使用当前文件的索引对应颜色,添加文件名作为图例标识 plt.plot(x, y, c=colors[idx], marker='.', linewidth=0.5, markersize=2, label=os.path.basename(file)) # 统一设置图表标签和样式,只需要执行一次 plt.xlabel('Write (V)', fontsize=12) plt.ylabel('Phase (deg)', color='xkcd:orange', fontsize=12) plt.tick_params(axis='y', colors='xkcd:orange', width=2) # Y轴刻度线颜色和粗细 plt.tick_params(axis='x', width=2) # X轴刻度线粗细 plt.title('多文件相位数据对比') plt.legend() # 显示图例区分不同文件 plt.show()
修改说明
- 颜色与数据绘制修正:
- 提前生成一次颜色列表
colors,避免循环内重复生成 - 用
enumerate获取文件的索引idx,直接对应colors[idx],每个文件使用唯一颜色 - 单独读取每个文件的DataFrame,不再合并所有文件,确保每个绘图都是单个文件的独立数据
- 提前生成一次颜色列表
- 样式优化:
- 将
plt.rcParams全局设置放在最前面,一次性配置坐标轴边框粗细和字体加粗 - 把标签、刻度样式设置放在循环外,只执行一次,避免重复操作且不会覆盖之前的设置
- 添加图例
plt.legend(),方便区分不同文件的曲线
- 将
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

