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

使用glob导入多文件后如何用Plotly在同一画布绘制数据曲线

Plotly多文件绘图问题解答

问题1:px.scatter(...)的写法是否正确?

不正确。
Plotly Express(即px)的scatter方法要求data_frame参数传入pandas DataFrame对象,你传入的是存储go.Scatter轨迹对象的列表,参数类型完全不匹配,该行代码运行会直接报错。

问题2:之前调用fig.show()无内容的原因

你在for循环的每次迭代中都新建了一个空的go.Figure()对象,但从未将生成的go.Scatter轨迹添加到图中,也没有在循环外将所有收集的轨迹统一添加到同一个图实例里。最后调用fig.show()时,调用的是最后一次循环生成的空Figure对象,自然没有任何内容展示。

正确实现方案

方案1:基于plotly.graph_objects实现(适配你已有的traces收集逻辑)

import pandas as pd
import plotly.graph_objects as go
import plotly.io as pio
import glob

pio.renderers.default = 'browser'

files = glob.glob('GIRS12_L_8V_0.95bar.*')
traces = []

for file in files:
    # 用正则匹配任意空白分隔符,避免固定双空格匹配失效导致读取出错
    dat = pd.read_csv(file, sep=r'\s+', engine='python')
    dat.columns = ['time','v(t)'] 
    # name参数用于图例区分不同文件的曲线
    traces.append(go.Scatter(x = dat['time'], y = dat['v(t)'], name=file.split('/')[-1]))

# 将所有轨迹传入同一个Figure实例
fig = go.Figure(data=traces)
# 可选:配置图表样式
fig.update_layout(
    title='多文件v(t)随时间变化曲线',
    xaxis_title='时间',
    yaxis_title='v(t)'
)
fig.show()

方案2:基于plotly.express实现

如果更习惯用px的接口,可以先把所有文件的数据合并为同一个DataFrame,再通过颜色区分不同文件的曲线:

import pandas as pd
import plotly.express as px
import plotly.io as pio
import glob

pio.renderers.default = 'browser'

files = glob.glob('GIRS12_L_8V_0.95bar.*')
df_list = []

for file in files:
    dat = pd.read_csv(file, sep=r'\s+', engine='python')
    dat.columns = ['time','v(t)']
    # 新增列标记数据来源文件
    dat['source_file'] = file.split('/')[-1]
    df_list.append(dat)

# 合并所有数据
df_all = pd.concat(df_list, ignore_index=True)
# 绘图,color参数自动按来源文件区分曲线
fig = px.line(
    df_all, 
    x='time', 
    y='v(t)', 
    color='source_file',
    title='多文件v(t)随时间变化曲线'
)
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:36:03