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

