Python 数据可视化:数据分布统计图和热图

2020-12-03  本文已影响0人  you的日常

本课将继续介绍 Seaborn 中的统计图。一定要牢记,Seaborn 是对 Matplotlib 的高级封装,它优化了很多古老的做图过程,因此才会看到一个函数解决问题的局面。

2.4.1 数据分布统计图

在统计学中,研究数据的分布情况,也是一个重要的工作,比如某些数据是否为正态分布——某些机器学习模型很在意数据的分布情况。

在 Matplotlib 中,可以通过绘制直方图将数据的分布情况可视化。在 Seaborn 中,也提供了绘制直方图的函数。

%matplotlib inline
import seaborn as sns
import numpy as np
sns.set()
np.random.seed(0)
x = np.random.randn(100)
ax = sns.distplot(x)

输出结果:

enter image description here

sns.distplot 函数即实现了直方图,还顺带把曲线画出来了——曲线其实代表了 KDE。

seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)

除了 sns.distplot 之外,在 Seaborn 中还有另外一个常用的绘制数据分布的函数 sns.kdeplot,它们的使用方法类似。

2.4.2 联合统计图

首先看这样一个示例。

sns.set(rc={'axes.facecolor':'cornflowerblue', 'figure.facecolor':'cornflowerblue'})    #①
tips = sns.load_dataset("tips")
jg = sns.JointGrid(x='total_bill', y='tip', data=tips)    #②

输出结果:

image

① 的作用是设置所得图示的背景颜色,这样做的目的是让下面的 ② 绘制的图像显示更清晰,如果不设置 ①,在显示的图示中看到的就是白底图像,有的部分看不出来。

② 最终得到的是坐标网格,而且在图中分为三部分,如下图所示。

image

相对于以往的坐标网格,多出了 B 和 C 两个部分。也就是说,不仅可以在 A 部分绘制某种统计图,在 B 和 C 部分也可以绘制。

继续操作:

jg = sns.JointGrid(x='total_bill', y='tip', data=tips)
jg.plot(sns.regplot, sns.distplot)    #③

输出结果:

image

语句 ③ 实现了在坐标网格中绘制统计图的效果,jp.plot 方法以两个绘图函数为参数,分别在 A 部分绘制了回归统计图,在 B 和 C 部分绘制了直方图,而且直方图分别表示了对应坐标轴数据的分布,即:

我们把有语句 ② 和 ③ 共同实现的统计图,称为联合统计图。除了用 ② ③ 两句可以绘制这种图之外,还有一个函数也能够“两步并作一步”,具体如下:

seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, height=6, ratio=5, space=0.2, dropna=True, xlim=None, ylim=None, joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)

注意,参数 kind 的取值只能是“scatter”、“reg”、“resid”、“kde”、“hex”中的一个,这就规定了在 A 区中所显示的统计图的种类。

sns.set()
sns.jointplot(x="total_bill", y="tip", kind='reg', data=tips)    #④

输出结果:

上一篇下一篇

猜你喜欢

热点阅读