seaborn histplot含异常值绘制直方图导致Jupyter Notebook崩溃如何解决
问题原因
你的数据里-999和正常RESULT值(0.0004~0.0007区间)的极差过大,seaborn的histplot默认会根据全量数据的极值自动生成bins,会产生数量极多的空bins(覆盖-999到0.0007的整个区间),占用过量内存导致进程崩溃。
解决方法
方法1:指定直方图的统计范围(不显示异常值,不删除原始数据)
直接用histplot的binrange参数限制统计的数值范围,不会修改原始数据集,仅在绘图时忽略范围外的-999值:
import seaborn as sns import matplotlib.pyplot as plt sns.histplot( data = test_df_1, x='RESULT', hue='Category', edgecolor="none", binrange=(0, 0.001) # 根据你的正常数值区间灵活调整即可 ) plt.show()
方法2:保留异常值展示,手动设置bins
如果你需要把-999的异常值也展示在图中,手动设置bins区间避免生成过多无效bins:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 手动设置bins:第一个bin覆盖-999,后面的bin覆盖正常数值区间 custom_bins = [-1000, -998] + np.arange(0.0003, 0.0008, 0.00005).tolist() sns.histplot( data = test_df_1, x='RESULT', hue='Category', edgecolor="none", bins=custom_bins ) # 可自定义x轴刻度让展示更清晰 plt.xticks([-999, 0.0005], ['异常值(-999)', '正常值区间']) plt.show()
额外优化建议
- 绘制带极端值的直方图时,也可以选择对数轴来压缩极差避免内存问题:添加
log_scale=True参数即可,注意你的正常值均大于0,-999为负数无法取对数,需要配合binrange参数使用。
内容的提问来源于stack exchange,提问作者user16859572
相关产品推荐
相关产品推荐

