减少 Plotly 在 Python 中保存的 json 文件大小

Posted

技术标签:

【中文标题】减少 Plotly 在 Python 中保存的 json 文件大小【英文标题】:Reduce json file size saved by Plotly in Python 【发布时间】:2021-11-30 17:04:07 【问题描述】:

我正在尝试使用以下 Python 代码从具有 1600 万个点的 3D NumPy 数组中绘制直方图:

data = np.random.random((252,252,252)).flatten()

fig = go.Figure()
fig.add_trace(go.Histogram(x=data, nbinsx=100))
fig.write_json(plotly_file)

我意识到,即使是直方图,Plotly 也会保存所有数据点,使其无法用于网站。有没有办法只保存 bin 数据而不将原始数据点保存在 JSON 文件中?谢谢!

【问题讨论】:

【参考方案1】: 根据文档https://plotly.com/python/histograms/#accessing-the-counts-yaxis-values 为您的用例编码预先计算的直方图 尺寸分析。预先计算的数字比原生版本小 10,000

预先计算的直方图

h = np.histogram(data, bins=np.arange(-0.005, 1.006, step=0.01))
fig2 = go.Figure(
    go.Bar(
        customdata=[f"n:.3f - h[1][i+1]:.3f, h[0][i]" for i, n in enumerate(h[1][:-1])],
        x=h[1],
        y=h[0],
        hovertemplate="(%customdata)<extra></extra>",
    )
).update_layout(bargap=0)

尺寸分析

import pickle
print(len(pickle.dumps(fig)), len(pickle.dumps(fig2)))
128029628 9731

【讨论】:

我检查了您的解决方案,效果非常好!谢谢!

以上是关于减少 Plotly 在 Python 中保存的 json 文件大小的主要内容,如果未能解决你的问题,请参考以下文章

减少 Plotly.js 库的大小

Python/Plotly:如何使用要显示的信息自定义悬停模板?

plotly.graph_objects 正在保存旧信息

如何将 Plotly 图保存在 ipynb 文件中?

以交互模式在 qwebview 中打开 plotly

使用 plotly 将折线图/面积图创建为甘特图