从使用 glob 导入的多个文件中绘图
Posted
技术标签:
【中文标题】从使用 glob 导入的多个文件中绘图【英文标题】:Plot from multiple files imported with glob 【发布时间】:2021-11-17 20:04:51 【问题描述】:我需要处理数百个数据文件,我想将结果绘制在一个图表中。我正在使用带有 for 循环的 glob 来读取和存储数据,但我不知道如何用 plotly 绘制它们。
import pandas as pd
import plotly.express as px
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=' ')
dat.columns = ['time','v(t)']
fig = go.Figure()
traces.append(go.Scatter(x = dat['time'], y = dat['v(t)']))
px.scatter(data_frame = traces)
调用px.scatter(...)对吗?我最后使用了 fig.show() 但我不知道为什么它没有在图表中显示任何内容。
【问题讨论】:
您的所有 CSV 文件都有两列吗? (time 和 v(t)) 您是否希望每个文件分散为单独的颜色并在图例中有条目? (您注意到 100 多个文件,颜色将被重复使用,图例将变得太长而无法理解)。 Plotly Express 是比 图形对象 更高级别的 API,通常使用其中一种或另一种,如果 API 提供满足可视化要求所需的所有功能,则为 px 您希望每个文件中的数据在这个散点图上显示为单独的轨迹吗?或者您想使用来自所有这些文件的组合数据将v(t)
与time
绘制为一条轨迹?
@DerekO :是的,我把它称为散点图是错误的,我想绘制 v(t) 对时间的曲线图。
@RobRaymond:是的,所有文件都有两列,此时我不介意图例,因为我只想检查数据是否可靠。
@Michele - 所以我在下面提供的解决方案有效。如果你想要线条而不是散点图,只需更改为px.line
【参考方案1】:
已生成 100 个 CSV 用于演示
pathlib 是与文件系统交互的更 Pythonic / OO 方法,因此 glob()
plotly 的最简单方法是使用 Plotly Express 生成所有轨迹。已采取将所有数据准备到单个 pandas 数据框的方法,以使这变得超级简单
每 cmets,一个有这么多痕迹的图,因此这么长的图例可能不是您想要实现的最佳可视化。考虑您需要什么来可视化和调整解决方案以实现更好的可视化
from pathlib import Path
import pandas as pd
import numpy as np
import plotly.express as px
# location where files exist
p = Path.cwd().joinpath("SO_csv")
if not p.is_dir():
p.mkdir()
# generate 100s of files
for i in range(400):
pd.DataFrame(
"time": pd.date_range("00:00", freq="30min", periods=47),
"v(t)": pd.Series(np.random.uniform(1, 5, 47)).sort_values(),
).to_csv(p.joinpath(f"GIRS12_L_8V_0.95bar.i"), index=False)
# read and concat all the CSVs into one dataframe, creating additional column that is the filename
# scatter this dataframe, a scatter / color per CSV
px.scatter(
pd.concat(
[pd.read_csv(f).assign(name=f.name) for f in p.glob("GIRS12_L_8V_0.95bar.*")]
),
x="time",
y="v(t)",
color="name",
)
【讨论】:
以上是关于从使用 glob 导入的多个文件中绘图的主要内容,如果未能解决你的问题,请参考以下文章
使用多个 .csv 文件在 python 中自动制作多个绘图