使用Plotly的create_distplot绘制大量数据时内核卡顿如何解决?
问题根源
create_distplot 运行卡顿/内核挂死的核心原因是两个高耗时操作:
- 默认开启的核密度估计(KDE)在计算25万级数据时,默认算法时间复杂度为O(n²),会占用大量CPU和内存资源
- 未手动指定直方图bin数时,程序会自动计算生成过多个bin,加上默认开启的底部rug样本条,会生成数千个矢量图形元素,渲染时占用极高资源导致内核无响应
解决方案
方案1:优化原有create_distplot参数
关闭不需要的计算项、手动限制bin数量,直接降低计算和渲染开销:
import numpy as np import plotly.figure_factory as ff x = np.fromfile("./data.txt", dtype="int64") hist_data = [x] group_labels = ['distplot'] fig = ff.create_distplot(hist_data, group_labels, bin_size=5, # 根据数据范围调整,数值越大计算量越小 show_curve=False, # 关闭KDE曲线,节省大量计算资源 show_rug=False) # 关闭底部rug样本条,25万点的样本条无参考价值还会卡死 fig.show()
方案2:对数据抽样后绘图
分布形态不会随样本量减少发生明显变化,可随机抽取10%~20%的样本绘图,性能提升10倍以上:
# 读取数据后加一行抽样即可,其他逻辑不变 x = np.fromfile("./data.txt", dtype="int64") x = np.random.choice(x, size=50000, replace=False) # 抽取5万个样本,不影响分布判断
方案3:替换为性能更好的新版绘图接口
create_distplot 已经被Plotly官方标记为弃用接口,推荐使用性能优化过的plotly.express.histogram,原生支持大数量渲染,效果和distplot一致:
import numpy as np import plotly.express as px x = np.fromfile("./data.txt", dtype="int64") # 如需抽样可加:x = np.random.choice(x, size=25000, replace=False) fig = px.histogram(x=x, nbins=100, # 手动指定bin数量 histnorm='probability density', marginal='violin') # 可选添加边缘分布,完全覆盖原有distplot的展示效果 fig.show()
内容的提问来源于stack exchange,提问作者Vetedde
相关产品推荐
相关产品推荐

