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

Plotly结合Pandas绘图时仅为存在列添加轨迹的实现方法

适配不同列数CSV的Plotly通用绘图方案

核心逻辑非常简单:提前把所有你需要绘制的列整理成统一配置,每次读入DataFrame后先判断列是否存在,仅对实际存在的列添加绘图轨迹,不需要针对单个CSV调整代码。

具体实现步骤

  • 先把所有你需要和Time列对照绘制的列名,统一整理到配置列表里,不管某份CSV是否包含该列,全部列进去即可。
  • 每次读取CSV得到DataFrame后,遍历配置列表,逐个判断目标列是否在当前DataFrame的列名中,存在才执行添加轨迹的操作。

可直接复用的代码示例

import os
import pandas as pd
import plotly.graph_objects as go

# --------------------------
# 配置区:所有需要绘制的列统一在这里维护,后续新增要画的列直接往列表里加就行
PLOT_TARGET_COLUMNS = [
    "Number of errors",
    # 把你其他要绘制的列名都补在这里,包括仅在15列、16列版本CSV里存在的列
    # 例如 "Translation success rate", "Processing latency" 等
]
# --------------------------

folder_path = 'U:/Users/Admin/Temp/Aux/'
# 注意修正原代码里的笔误:folder_path1 应该是 folder_path
target_file = [f for f in os.listdir(folder_path) if f.endswith("TranslationIssues.csv")][0]
df = pd.read_csv(os.path.join(folder_path, target_file))

fig = go.Figure()

# 遍历所有待绘制列,仅当列在当前DF中存在时才添加轨迹
for col_name in PLOT_TARGET_COLUMNS:
    if col_name in df.columns:
        fig.add_trace(go.Scatter(
            x=df['Time'],
            y=df[col_name],
            mode='markers',
            name=col_name
        ))

# 后续照常设置布局、展示图片即可
fig.update_layout(xaxis_title="Time", yaxis_title="Value")
fig.show()

进阶适配(可选)

如果不同列需要用不同的绘图样式(比如部分列用折线、部分列用散点,或者要自定义显示的图例名称),可以把纯列名列表改成配置字典列表,判断逻辑保持不变即可:

# 带样式配置的版本
PLOT_CONFIGS = [
    {"column": "Number of errors", "mode": "markers", "legend_name": "错误总数"},
    {"column": "Frame drop rate", "mode": "lines", "legend_name": "掉帧率"},
    {"column": "Translation latency", "mode": "lines+markers", "legend_name": "翻译延迟"},
]

fig = go.Figure()
for config in PLOT_CONFIGS:
    col = config["column"]
    if col in df.columns:
        fig.add_trace(go.Scatter(
            x=df['Time'],
            y=df[col],
            mode=config["mode"],
            name=config["legend_name"]
        ))

几个实用提示:

  • 路径拼接建议用os.path.join(),不要直接用字符串拼接,避免Windows/macOS系统斜杠不兼容的问题。
  • 如果需要批量处理文件夹下所有CSV,只要在现有逻辑外层套一层文件遍历循环即可,核心的列存在判断逻辑不需要改动。
  • 因为所有文件的前10列完全一致,公共列(比如Time)不需要做存在判断,只有非公共的可选列走存在校验即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:54:27