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

Python Matplotlib:多数据集色图绘图及轴标签样式调整问题

多Excel数据绘图颜色重复及坐标轴样式调整解决方案

问题诊断

你的代码存在两个核心问题:

  1. 颜色重复且数据绘制错误:
    • 外层遍历每个Excel文件时,每次都把所有已读取的文件数据合并成all_frames,导致每次绘制的都是所有文件的混合数据,而非单个文件的独立数据集
    • 内层嵌套了range(n)循环,每个文件都重复绘制n次相同数据,颜色被反复覆盖,最终只显示最后一次循环的颜色
  2. 样式设置冗余:坐标轴和标签的样式在循环内重复设置,不仅无效还可能导致冲突

修正后的代码

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()

修改说明

  1. 颜色与数据绘制修正:
    • 提前生成一次颜色列表colors,避免循环内重复生成
    • 用enumerate获取文件的索引idx,直接对应colors[idx],每个文件使用唯一颜色
    • 单独读取每个文件的DataFrame,不再合并所有文件,确保每个绘图都是单个文件的独立数据
  2. 样式优化:
    • 将plt.rcParams全局设置放在最前面,一次性配置坐标轴边框粗细和字体加粗
    • 把标签、刻度样式设置放在循环外,只执行一次,避免重复操作且不会覆盖之前的设置
    • 添加图例plt.legend(),方便区分不同文件的曲线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:25:34