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

Python绘制Excel多组实验数据图:解决曲线连接与颜色问题

问题与解决方案

问题背景

我有一个包含大量实验数据的Excel文件,每组实验数据均以Time列值为00:00:00开头,各组实验的结束时间不一致。希望将所有实验数据绘制在同一图表中,但现有代码存在两个问题:

  • 第一个实验的终点会与第二个实验的起点用线条连接,不符合需求
  • 尝试绘制每第5组实验时,各组的颜色没有变化

问题1:实验间线条意外连接的解决

你当前尝试用添加NaN行的方式断开连接,但逻辑存在问题——直接在experiment_data前拼接NaN行,并没有真正实现不同实验绘图数据的分隔。正确的做法是每个实验单独调用一次plt.plot(),因为Matplotlib会为每个plot()调用生成独立的线条对象,不会自动连接不同实验的线条,根本不需要手动添加NaN来断开。

问题2:各组颜色不变化的解决

默认情况下Matplotlib会循环使用有限的默认颜色列表,要实现每组实验(或指定组)的颜色区分,需显式指定颜色映射。取消你注释的colors行,在plot()时指定对应颜色即可。如果仅需绘制每第5组,在循环内增加判断逻辑即可。

修改后的完整代码

import os
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

file_path = os.path.join(source_folder, file_name)

df = pd.read_excel(file_path, sheet_name='record')  

filtered_df = df[df.iloc[:, 3] == 'CC DChg']

selected_columns = ['Time', 'Current(A)', 'Voltage(V)', 'Capacity(Ah)', 'Energy(Wh)']
filtered_selected_df = filtered_df[selected_columns]

start_indices = filtered_selected_df[filtered_selected_df['Time'] == '00:00:00'].index
plt.figure(figsize=(8, 6))

num_experiments = len(start_indices) 
colors = plt.cm.viridis(np.linspace(0, 1, num_experiments))  # 启用渐变颜色映射

for i in range(num_experiments):
    start_idx = start_indices[i]
    
    if i + 1 < num_experiments:
        end_idx = start_indices[i + 1]
    else:
        end_idx = len(filtered_selected_df)
        
    experiment_data = filtered_selected_df.iloc[start_idx:end_idx]
    
    # 如需仅绘制每第5组,取消下方注释并缩进后续代码
    # if (i + 1) % 5 != 0:
    #     continue
    
    # 直接绘制当前实验数据,无需额外拼接NaN
    plt.plot(experiment_data['Capacity(Ah)'], experiment_data['Voltage(V)'],
             marker='o', linestyle='-', color=colors[i],
             label=f'cycle {i + 1}')

plt.title(f'Voltage vs Capacity for {file_name}')
plt.xlabel('Capacity(Ah)')
plt.ylabel('Voltage(V)')
plt.grid(True)
plt.legend()  # 将图例创建移到循环外,提升效率
plt.show()

关键修改点说明

  • 移除了拼接NaN的冗余代码,每个实验独立绘图,自然避免跨实验线条连接
  • 启用viridis渐变颜色映射,为每组实验分配唯一颜色
  • 将plt.legend()移至循环外部,避免重复创建图例,提升性能
  • 增加了“仅绘制每第5组”的可选逻辑注释,按需启用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:05:04