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

Python中如何减小Plotly直方图输出的JSON文件大小,仅保留分箱数据

解决Plotly直方图导出JSON体积过大的方法

你可以提前用NumPy计算好直方图的分箱和对应计数,再用Plotly的Bar trace替代原生Histogram trace生成图表,即可避免原始数据被存入JSON文件,体积会大幅缩小。

改造后代码示例

import numpy as np
import plotly.graph_objects as go

# 原始3D数据生成逻辑保持不变
data = np.random.random((252,252,252)).flatten()

# 提前计算分箱计数,bins参数和你原配置的nbinsx=100对应
counts, bin_edges = np.histogram(data, bins=100)
# 计算分箱中点作为X轴坐标,显示效果和原生直方图一致
bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2

fig = go.Figure()
fig.add_trace(go.Bar(
    x=bin_centers,
    y=counts,
    # 匹配分箱宽度、去掉间隙,样式和原生Histogram完全一致
    width = np.diff(bin_edges),
    marker = dict(line=dict(width=0))
))
fig.update_layout(bargap=0)

# 此时导出的JSON仅包含100组分箱数据,无原始点
fig.write_json(plotly_file)

效果说明

原方案导出的JSON包含全部1600万个原始数据点,体积通常在几十MB以上;改造后导出的JSON仅包含100个分箱的坐标和计数值,体积可缩小至KB级,完全满足网页加载使用要求。

如果不想替换为Bar trace,也可以在生成Histogram的fig实例后,手动删除trace中的原始数据字段:

# 针对原生Histogram trace的精简方案(稳定性略低于预计算分箱方案)
fig = go.Figure()
fig.add_trace(go.Histogram(x=data, nbinsx=100))
# 手动清除原始数据字段
fig.data[0].x = None
# 可选:保留计算好的分箱起始、结束、步长配置,避免重算
fig.data[0].xbins = {
    "start": bin_edges[0],
    "end": bin_edges[-1],
    "size": bin_edges[1] - bin_edges[0]
}
fig.write_json(plotly_file)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:01