如何解决在 seaborn kdeplot (python)
我正在使用 seaborn 核密度估计来绘制概率密度等高线,如下所示:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
x = np.random.normal(0,3,100)
y = np.random.normal(0,1,100)
fig,ax = plt.subplots()
ax.scatter(x,y,marker='.')
ax.set_aspect('equal')
ax.set(xlim=(-13,13))
ax.set(ylim=(-8,8))
divider = make_axes_locatable(ax)
cax = divider.append_axes("right",size="5%",pad=0.05)
sns.kdeplot(x,fill=True,shade_lowest=True,alpha=0.7,linewidths=3,\
cmap='coolwarm',ax=ax,cbar=True,cbar_ax = cax)
colour = ax.collections[1].get_facecolor()
我正在制作其中的许多作品,因此为了比较它们,我希望固定情节限制。如您所见,我的问题是当我更改情节的限制时,seaborn 不会填充背景。
我代码最后一行中的变量 colour
包含我想要填充背景的内容。我需要帮助弄清楚如何做到这一点。我试过了
ax.set_facecolor(colour.reshape(4))
这个问题本质上与 this 6 年前的问题相同,后者建议只删除最后一个轮廓下方的填充。我相信一定有办法获得所需的行为。我真的很感激任何帮助!
作为奖励:sns.kdeplot() 的 linewidths
参数什么也不做。如何更改等高线的线宽?
解决方法
正如@mwaskom 在评论中所建议的,您可以使用 cut
parameter。
这可以通过 cut 参数部分避免,它指定 曲线应该超出极端数据点的范围。但 这仅影响绘制曲线的位置;密度估计 仍然会在没有数据存在的范围内平滑,导致它 在分布的极端情况下人为地降低:
我使用反复试验来获得正确的 cut 值,即 12
。详情请参考以下代码。
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
x = np.random.normal(0,3,100)
y = np.random.normal(0,1,100)
fig,ax = plt.subplots()
ax.scatter(x,y,marker='.')
ax.set_aspect('equal')
ax.set(xlim=(-13,13))
ax.set(ylim=(-8,8))
divider = make_axes_locatable(ax)
cax = divider.append_axes("right",size="5%",pad=0.05)
sns.kdeplot(x,fill=True,thresh=0,alpha=0.7,cmap='coolwarm',ax=ax,cbar=True,cbar_ax = cax,cut=12) # `shade_lowest` is now deprecated in favor of `thresh`
colour = ax.collections[1].get_facecolor()
输出图像:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。