【发布时间】:2021-08-16 13:56:04
【问题描述】:
当我浏览在线教程和\或一般文章时,当我遇到一个使用 Seaborn distplot 图我使用 histplot 或 displot 重新创建它。
我这样做是因为 distplot 已被弃用,我想使用更新的标准重新编写代码。
我正在浏览这篇文章:https://www.kite.com/blog/python/data-analysis-visualization-python/
并且有一个部分使用 distplot,其输出我无法复制。
这是我要复制的代码部分:
col_names = ['StrengthFactor', 'PriceReg', 'ReleaseYear', 'ItemCount', 'LowUserPrice', 'LowNetPrice']
fig, ax = plt.subplots(len(col_names), figsize=(8, 40))
for i, col_val in enumerate(col_names):
x = sales_data_hist[col_val][:1000]
sns.distplot(x, ax=ax[i], rug=True, hist=False)
outliers = x[percentile_based_outlier(x)]
ax[i].plot(outliers, np.zeros_like(outliers), 'ro', clip_on=False)
ax[i].set_title('Outlier detection - {}'.format(col_val), fontsize=10)
ax[i].set_xlabel(col_val, fontsize=8)
plt.show()
不再使用 distplot 本身和轴变量。代码现在运行。
简而言之,我所要做的就是在不使用已弃用代码的情况下复制上述代码的精确输出(地毯图、代表已删除值的红点等)。
我尝试了 displot 和 histplot 的各种组合,但我无法以任何其他方式获得完全相同的输出。
【问题讨论】:
-
看来
displot应该能够复制这个。为了避免其他人重复您的努力,您已经尝试过什么,它与原始输出有何不同? -
我最接近的是:
sns.displot(x, ax=ax[i], rug=True)我得到了地毯,但它是直方图,而不是 kde 图,因为我使用的是 displot,所以我根本不明白。代表已删除值的红点消失了,我无法弄清楚如何在不完全破坏输出的情况下摆脱轴选项。 Histplot 没有地毯选项。 -
使用上面的行,我得到了这些警告(并且我没有复制我的问题中发布的代码):
C:\Users\Mark\AppData\Local\Programs\Python\Python38\lib\site-packages\seaborn\distributions.py:2164: UserWarning: `displot` is a figure-level function and does not accept the ax= paramter. You may wish to try histplot. warnings.warn(msg, UserWarning) -
是的,文档状态
displot是图形级函数,而不是轴级函数,因此您无法告诉它要在哪些轴上绘图。我相信你可以改为使用kdeplot()和rugplot()来获得你想要的结果(我认为这就是displot在幕后所做的)。此外,如果您想继续使用displot,可以使用kind='kde'来获取kde 图而不是直方图。
标签: python matplotlib seaborn