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
相关产品推荐
相关产品推荐

