直方图、密度图的绘制方法
1.直方图
fig,ax = plt.subplots(figsize=(5,3.5),dpi=100,facecolor="w")
hist = ax.hist(x=hist_x_data, bins=bins,color="gray",edgecolor ='black',lw=.5)
其中参数 x 为要绘制的样本数据;参数 bins 用于定义分布区间,该参数的值可设置成整数、给定数值序列或字符串,默认为数值类型且值为 10。参数 density 对应的值为布尔类型,该参数决定绘图结果是否为密度图,默认值为 False。
2.密度图
Matplotlib 在现阶段则没有具体的绘制密度图的函数,一般是结合Scip库中的gaussian_kde函数结果进行绘制。scikit-learn库中neighbors.KernelDensity模块提供Gaussian、Tophat、Epanechnikov、Exponential、Linear和Cosine共6种核函数来进行核密度估计计算。KDEpy库更是提供了多达9种核函数,包括Gaussian、Exponential、Box、Tri、Epa、Biweight、Triweight、Tricube、Cosine。
2.1 3种绘制密度图方法对比
使用 Seaborn 中的kdeplot()函数绘制密度图较为简单,结合rugplot()函数可以绘制沿X轴的数据分布情况。其他两种方法较kdeplot()函数麻烦一些,但这两种方法绘制出的密度图更为清楚。
2.2 多组数据、同一个核函数
对于具有不同数值分布情况的多组样本数据,经常使用同一核函数进行拟合并将结果绘制成密度图。这种情况一般发生在数据探索阶段,上述方法常用于查看每个维度数据的分布情况或对不同数据间的差异进行对比。
2.3 渐变颜色填充
为了更好地呈现绘图数据的数值范围和密度图的视觉效果,我们需要对绘制密度图的原始数据值进行颜色映射,即用一个连续渐变颜色条表示具体的绘图数值,且对应颜色填充在密度图曲线范围内。
2.4 “山脊”图
在对多组数据进行密度图绘制时,除使用子图对每组数据进行绘制以外,还可将多组数据绘制结果堆叠摆放,即使用“山脊”图表示。“山脊”图常用来表示不同类别的数据在同一因素的分布差异情况。我们可以使用 Matplotlib 的“原生”方法绘制“山脊”图,也可以使用 JoyPy 库绘制。
用 JoyPy 库绘制每组数据的直方“山脊”图,将 joyplot()函数中的参数 hist 设置为 True 即可,还可以通过设置 colormap 参数来对“山脊”图进行颜色映射。(colormaps为自己编写的文件)
# 直方"山脊"图的绘制
fig, axes = joypy.joyplot(group_data, by="color", 3. column="depth", labels=sord_index, grid="y", linewidth=1, figsize=(7,6), color="gray", hist=True, xlabelsize=15, ylabelsize=15)
# 渐变颜色填充"山脊"图的绘制
from colormaps import parula
fig, axes = joypy.joyplot(group_data, by="color", column="depth", labels=sord_index, grid="y", linewidth=1, figsize=(7,6), hist=False, colormap=parula, xlabelsize=15, ylabelsize=15)
注意:由于JoyPy 库的功能还不够完善,因此,建议使用 Matplotlib 的原生方法绘制“山脊”图。
2.5 同一坐标系中多个密度图的绘制
在将多个密度图绘制在同一坐标系时,除了使用 Matplotlib 库进行循环绘制以外,还可以使用 Seaborn 库进行快速绘制。
ProPlot 库在绘制 Seaborn 图形对象时的绘图定制化操作较弱。
2.6 Q-Q图和P-P图
通过自定义函数的计算结果结合Matplotlib的plot()函数来进行Q-Q图、P-P图的绘制,也可以使用第三方库的内置绘图函数进行绘制,如SciPy库中的stats.probplot()函数和 statsmodels库中graphics.gofplots.ProbPlot类的qqplot()、ppplot()函数。
Q-Q图和P-P图主要用于对数据分布类型进行检验。
2.7 经验分布函数图
在 Python 中,我们可根据经验分布函数的定义编写自定义函数,实现对用于绘制经验分布函数图的结果数值的计算。
除自定义函数以外,Seaborn 库中的 ecdfplot() 函数也可以绘制经验分布函数图。statsmodels库中的 ECDF() 函数可返回经验分布函数的一系列结果。
随着数据量的增加,经验分布函数曲线和累积分布函数曲线趋于一致。