使用Seaborn的kdeplot/displot替代废弃distplot绘制numpy数组PDF并对比
替换Seaborn弃用distplot的实现方案
你原来的distplot配置hist=False, rug=True是要实现「仅绘制核密度估计曲线 + 底部数据样本标记」的效果,以下是两种官方推荐的替换方案:
方案1:使用kdeplot(轴级函数,和原用法兼容性最高)
直接将原来的distplot替换为kdeplot即可,参数几乎完全兼容,代码如下:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt error = np.array([1,2,2,3,4,4,5]) error2 = np.array([3,3,4,4,4,6]) # 直接替换distplot为kdeplot即可 sns.kdeplot(error, rug=True, color='blue') sns.kdeplot(error2, rug=True, color='red') plt.show()
效果完全等价于你原来的实现:无直方图,仅显示两条对应颜色的PDF曲线,底部带数据点rug标记
方案2:使用displot(图级函数,更适合后续扩展需求)
displot是Seaborn新版推荐的分布绘图入口,使用整洁数据格式可以一次完成双组对比绘图,代码如下:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt import pandas as pd error = np.array([1,2,2,3,4,4,5]) error2 = np.array([3,3,4,4,4,6]) # 整理为长格式整洁数据 df = pd.DataFrame({ 'value': np.concatenate([error, error2]), 'group': ['error']*len(error) + ['error2']*len(error2) }) sns.displot( data=df, x='value', hue='group', kind='kde', rug=True, palette=['blue', 'red'] ) plt.show()
这种方式的优势是如果后续需要加直方图、分面、调整画布尺寸等需求,只需要修改displot的参数即可,扩展性更强
内容的提问来源于stack exchange,提问作者EngGu
相关产品推荐
相关产品推荐

