Seaborn 多图组合

1. jointplot 两变量图

  数据分析中常用做图的方式实现相关性分析,即 X 轴设置为变量 A,Y 轴设置为变量 B,做散点图,由于散点图中点的叠加显示,往往还需要关注每个变量自身的分布情况,jointplot 把描述变量的分布图和变量相关的散点图组合在一起,是相关性分析最常用的工具,图片上还能展示回归曲线,以及相关系数。

1
2
3
4
5
6
import statsmodels.api as sm
import seaborn as sns
sns.set(style="darkgrid")
data = sm.datasets.ccard.load_pandas().data
g = sns.jointplot('AVGEXP', 'AGE', data=data, kind="reg",
xlim=(0, 1000), ylim=(0, 50), color="m")

  本例中使用 statsmodels 库的 ccard 数据,分析了其中两个数值类型变量的相关性,使用 xlim 和 ylim 设置了图片显示范围,忽略了离群点,kind 参数可设置做图方式:scatter 散点图,kde 密度图,hex 六边形图等,本例中选择 reg 画出了线性回归图。

2. pairplot 多变量图

  如果用对 N 个变量的相关性做散点图,用 maplotlib 需要做 NxN 个图,用 pairplot 函数调用一次即可实现,其对角线上是直方图,其余都是两两变量的散点图,不仅简单,还能组合在一起作对比。

1
2
data = sm.datasets.ccard.load_pandas().data
sns.pairplot(data, vars=['AGE','INCOME', 'INCOMESQ','OWNRENT'])

  图中可以看到,数据类型 INCOME 与 INCOMESQ 呈强相关,AGE 与 INCOME 也有一定相关趋势,对角线上的图对应的是每个因素与其自身的对比,图中以直方图显示了该变量的分布。

3. factorplot 两变量关系图

 factorplot 用于绘制两维变量的关系图,用 kind 可指定其作图类型,包括:point, bar, count, box, violin, strip 等。

1
2
data = sm.datasets.fair.load_pandas().data
sns.factorplot(x='occupation', y='affairs', hue='religious', data=data)

4. FacetGrid 结构化绘图网格

 FacetGrid 可以选择任意的做图方式,以及自定义的做图函数,通常包含两部分,FacetGrid 部分指定了数据集,行,列,map 部分指定做图方式,以及相应参数。

1
2
g = sns.FacetGrid(tips, col = 'time', row = 'smoker') # 按行和列的分类做N个图
g.map(plt.hist, 'total_bill', bins = 10) # 指定做图方式

  可以看到无论是连续图,还是分类图,无论是用 FacetGrid 还是 barplot 都是将多个特征放在同一张图片上展示,其差别一方面在于观察角度不同,另一方面也取决于数据自身的类型。