核密度估计(Kernel Density Estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度估计图可以比较直观的看出数据样本本身的分布特征。
    Seaborn中的核密度估计图的由kdeplot ()方法实现,kdeplot ()的参数及其意义如下:

    1. seaborn.kdeplot(data,data2=None,shade=False,
    2. vertical=False,kernel='gau',
    3. bw='scott',gridsize=100,cut=3,
    4. clip=None,legend=True,cumulative=False,
    5. shade_lowest=True,cbar=False, cbar_ax=None,
    6. cbar_kws=None, ax=None, *kwargs)

    (1)
    data2:绘制二维分布图时需给出数据
    (2)
    shade:若为True,则在kde曲线下面的区域中进行阴影处理,color控制曲线及阴影的颜色。
    (3)
    vertical:表示以X轴进行绘制还是以Y轴进行绘制。
    (4)
    kernel:核函数,可取值为{‘gau’ | ‘cos’ | ‘biw’ | ‘epa’ | ‘tri’ | ‘triw’ }之一,双变量KDE只能使用高斯核函数(gau)。
    (5)
    bw:即binwidth,同直方图的bin一样,控制了估算与数据间的紧密程度。可取值为:‘scott’ | ‘silverman’ | scalar | pair of scalars。
    (6)
    gridsize:评估网格中离散点的可选数量。
    (7)
    cut:表示绘制的时候,控制曲线绘制多远的极限值,默认值为3。
    (8)
    cumulative :是否绘制累积分布,累积分布最后的值应该是接近1。
    单个特征核密度估计图的效果如图所示。

    1. import pandas as pd # 导入pandas库
    2. import warnings # 载入当前版本seaborn库时会有警告出现,先载入warnings,忽略警告
    3. import seaborn as sns # 导入seaborn库
    4. import matplotlib.pyplot as plt # 导入matplotlib库
    5. warnings.filterwarnings("ignore") # 忽略警告
    6. sns.set(style="white", color_codes=True) # 确定主题为white
    7. iris = pd.read_csv("iris.csv") # 读取csv数据并转为Pandas的 DataFrame格式
    8. # sns.kdeplot: kernel density estimation 核密度估计图(单个特征)
    9. sns.FacetGrid(iris, hue="Species", size=6).map(sns.kdeplot, "PetalLengthCm").add_legend()
    10. plt.show()

    image.png
    核密度估计图
    利用kdeplot()方法可以绘制二元kde图像。

    1. import pandas as pd # 导入pandas库
    2. import warnings # 载入当前版本seaborn库时会有警告出现,先载入warnings,忽略警告
    3. import seaborn as sns # 导入seaborn库
    4. import matplotlib.pyplot as plt # 导入matplotlib库
    5. warnings.filterwarnings("ignore") # 忽略警告
    6. sns.set(style="white", color_codes=True) # 确定主题为white
    7. iris = pd.read_csv("iris.csv") # 读取csv数据并转为Pandas的 DataFrame格式
    8. # cbar:参数为True,添加一个颜色棒(颜色棒在二元kde图像中才有)
    9. sns.kdeplot(iris['SepalLengthCm'], iris['SepalWidthCm'],shade=True,cbar=True)
    10. plt.show()

    image.pngimage.png
    二元kde图

    1. import pandas as pd # 导入pandas库
    2. import warnings # 载入当前版本seaborn库时会有警告出现,先载入warnings,忽略警告
    3. import seaborn as sns # 导入seaborn库
    4. import matplotlib.pyplot as plt # 导入matplotlib库
    5. warnings.filterwarnings("ignore") # 忽略警告
    6. sns.set(style="white", color_codes=True) # 确定主题为white
    7. iris = pd.read_csv("iris.csv") # 读取csv数据并转为Pandas的 DataFrame格式
    8. #也可用FaceGrid()函数实现
    9. sns.FacetGrid(iris, size=6).map(sns.kdeplot, "SepalLengthCm", "SepalWidthCm",shade=True,cbar=True).add_legend()
    10. plt.show()


    Seaborn中还可以displot()方法绘制核密度估计图,displot()方法集合了matplotlib的hist()方法与seaborn中kdeplot()方法的功能,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。通过hist和kde参数调节是否显示直方图及核密度估计,默认hist、kde均为True。