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

