如何正确设置seaborn.kdeplot的x/y轴范围使填充覆盖全坐标区间
问题原因
seaborn.kdeplot默认仅基于输入数据的取值范围计算核密度估计的网格区域,后续调用ax.set_xlim()/ax.set_ylim()仅修改图表显示范围,不会改变已完成计算的KDE结果范围,因此填充区域仅出现在原始数据覆盖的区间。
解决方法
在调用kdeplot时新增clip参数,强制指定KDE的计算范围与你期望的坐标区间一致,配合你已经设置的thresh=0(展示所有密度大于0的区域)即可实现整区间填充。同时注意修正原代码中ax.set_ylim漏写右括号的语法问题。
修改后的完整代码如下:
import matplotlib.pyplot as plt import seaborn as sns f, ax = plt.subplots(figsize=(6, 6)) sns.kdeplot(x='est_x',y='est_y', data=data_pd.loc[(data_pd.Location=='L2') & (data_pd['Pressing Force (N)']!=0)], fill=True, levels=5, color="w", linewidths=1, cmap="rocket", thresh=0, ax=ax, clip=((0,5), (0,5))) # 新增clip参数指定KDE计算范围 ax.set_xlim((0,5)) ax.set_ylim((0,5)) # 补全右括号 plt.show()
如果填充边缘不够平滑,可以额外增加gridsize=200参数(默认值为100),提升KDE网格的采样密度,填充效果会更均匀。
内容的提问来源于stack exchange,提问作者Zachary
相关产品推荐
相关产品推荐

