使用gaussian_kde绘制等高线时始终出现0.000线,如何消除?
解决gaussian_kde绘制等高线时出现0.000概率线的问题
问题原因
scipy.stats.gaussian_kde基于高斯核计算概率密度,在远离样本数据的区域,密度值会趋近于0。matplotlib的contour函数默认自动生成的等高线层级包含了这些极低的密度值,因此会画出最外层的0.000概率线。
解决方法
1. 手动指定等高线层级,排除极低密度范围
先筛选出kde结果中有效最小值,再生成从该值开始的等高线层级:
# 过滤掉接近0的极小值,取有效密度的最小值 min_valid_kde = kde5[kde5 > 1e-8].min() # 生成30个从有效最小值到最大值的层级 levels = np.linspace(min_valid_kde, kde5.max(), 30) # 使用指定层级绘制等高线 axes[1].contour(x5, y5, kde5, levels=levels, colors='g')
2. 过滤kde结果中的极小值
直接将低于阈值的密度值设为NaN,让contour忽略这些区域:
kde5_processed = kde5.copy() # 设置阈值,将极小值替换为NaN kde5_processed[kde5_processed < 1e-8] = np.nan axes[1].contour(x5, y5, kde5_processed, 30, colors='g')
3. 配合vmin参数过滤低数值
在调用contour时设置vmin参数,指定绘制的最小密度值:
# vmin设置为接近0的阈值,低于该值的区域不绘制等高线 axes[1].contour(x5, y5, kde5, 30, colors='g', vmin=1e-8)
内容的提问来源于stack exchange,提问作者Ege Tunç
相关产品推荐
相关产品推荐

