本课将要介绍的关系图和回归图,与上一课中的分类特征统计图的不同之处在于,这两类图的目的是发现 X 和 Y 轴两个变量之间的可能关系。
2.3.1 关系统计图
如果要研究两个变量之间的可能函数关系,依据以往的经验,可以通过散点图进行探索——注意,这里所说的散点图,与上一课提到的“分类特征的散点图”是不同的。
还是看示例,来理解此处的散点图。
%matplotlib inline
import seaborn as sns
sns.set(style='ticks')
tips = sns.load_dataset("tips")
tips.head()
继续使用 tips 数据集。从结果中可以看到,特征 total_bill 和 tip 中的数值,都是浮点数(连续值),下面就分别以它们为坐标系的两个坐标轴,绘制散点图,试图找到这两个特征之间的关系——这就是“关系统计图”的目的。
sns.relplot(x='total_bill', y='tip', data=tips)
输出结果:
使用 sns.relplot 函数,所得到的图示与以往绘制散点图的效果差不多,如果看看这个函数完整参数列表,就能发现惊奇。
seaborn.relplot(x=None, y=None, hue=None, size=None, style=None, data=None, row=None, col=None, col_wrap=None, row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=None, dashes=None, style_order=None, legend='brief', kind='scatter', height=5, aspect=1, facet_kws=None, **kwargs)
上一课学习了 sns.catplot 函数,此处 sns.relpot 的参数与之类似,只有很小的差异。
在 sns.relplot 的参数中,除了 x, y 两个参数之外,同样也有 hue,它与以往的含义一样。
sns.relplot(x='total_bill', y='tip', hue='sex', data=tips)
输出结果:
以 hue='sex',在散点图中把 sex 特征所对应的数据区别开了。
此外,还有一个很熟悉的参数 kind,默认值是 'scatter',就意味着默认是绘制散点图。除了这个值之外,还可以是别的值——类似 sns.catplot 中的 kind。
- kind='scatter',默认值,等同函数 sns.scatterplot()。
- kind='line',等同函数 lineplot()。
对应着参数 kind 不同的值,分别也有相应专有函数的情况。仍然与 sns.catplot 类似,相对于各个专用函数,sns.relplot 的优势还是在于绘制分区坐标图。
g = sns.relplot(x="total_bill", y="tip", hue="time",
size="size", palette=["b", "r"], sizes=(10, 100), col="time", data=tips)
输出结果:
除了显示分区坐标系之外,还顺便对其他几个参数做了设置,请根据效果理解上述代码中的参数。
下面,还是按照原来的套路,通过对专有函数的介绍来进一步理解“关系统计图”的绘制。
1. sns.scatterplot
此函数的完整形式如下:
seaborn.scatterplot(x=None, y=None, hue=None, style=None, size=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=True, style_order=None, x_bins=None, y_bins=None, units=None, estimator=None, ci=95, n_boot=1000, alpha='auto', x_jitter=None, y_jitter=None, legend='brief', ax=None, **kwargs)
很多参数都是熟悉的了,这里不再一一解释了,下面通过举例了解其含义。
ax = sns.scatterplot(x="total_bill", y="tip", hue="day", style="time", data=tips)
输出结果:
从效果上看,其实通过 style='time' 又引入了一个维度,即用不同的散点形状表示 time 特征下的数据。
此外,参数 size 可以用于设置点的大小。如果将它指定为某个分类特征,那么也就相当于用散点的大小表示了该特征不同值,相当于又在坐标系中叠加了一个维度。
sns.scatterplot(x='total_bill', y='tip', hue='day', size='smoker', data=tips)
输出结果:
并且,参数 sizes(注意写法,是复数形式了)能够规定参数 size 中划分的不同特征的“散点”大小。
sns.scatterplot(x='total_bill', y='tip', hue='day',
size='smoker', sizes=(50, 150), data=tips)
输出结果:
了解了 sns.scatterplot 的使用方法之后,再研习 sns.relplot 的参数 kind='line' 时的等同函数 sns.lineplot。
2. sns.lineplot
用这个函数,能够根据 x 轴和 y 轴的数值,直接画出反映了两个变量关系的曲线。
sns.lineplot(x='total_bill', y='tip', data=tips)
输出结果: