继学完上篇(python可视化(七)绘制詹姆斯、杜兰特、伦纳德生涯数据热度图)热度图后,我们基本上学完了seaborn库中常用的绘图方法,这里我们学习与seaborn库相关的最后两个内容,FacetGrid和PairGrid。
FacetGrid
首先FacetGrid是seaborn库中的一个类,我们在初始化这个类时只需要给它传一个DataFrame的数据集即可。实例化这个类以后,我么就可以直接使用这个对象的方法绘制需要的图形,这里,我们还是接着使用上篇文章中詹姆斯、杜兰特和伦纳德的职业生涯数据为例,数据结构如下:
%matplotlib inline import numpy as np import pandas as pd import seaborn as sns from scipy import stats import matplotlib as mpl import matplotlib.pyplot as plt sns.set(style="ticks") career_data=pd.read_excel(r"C:\python_wan\nba_player_data.xlsx",header=0,sheet_name="all_stars") career_data.loc[14:20]

数据结构预览
这个数据包含了詹姆斯、杜兰特和伦纳德三位球员的赛季数据,换句话说,每个球员的数据是这个数据的一个子集,那么这个数据按照球员分类,可以分为3个子集。现在有一个需求是这样的:绘制出三位球员的抢断数和得分之间的散点图。对于这样一个需求,我们可能会这样实现:直接调用seaborn库中的scatterplot()函数绘制出散点图,代码如下:
sns.scatterplot(x="抢断",y="得分",data=career_data,hue="姓名")

直接绘制散点图
当你画出这样的图形时,你可能觉得已经完成任务了,但是需求又变了,让你不要共用坐标轴,而是每个球员分别占一个坐标轴,怎么办呢?不用怕,这时候FacetGrid就可以派上用场了,这个类就是根据子集数据分别实例化对应的坐标轴,然后在坐标轴上绘制出对应的图形,我们看代码:
#根据球员姓名实例化faceGrid类,生成对象g g = sns.FacetGrid(career_data, col="姓名")

根据姓名分别绘制出3个坐标格
可以看到,当实例化生成对象g时,生成了3个坐标格,因为这个数据集中按姓名分只有3份,所以说绘制出的坐标格数量和根据分类的子集份数有关。接下来,我们只需要调用map()方法绘制出散点图即可,如下:
#根据球员姓名实例化faceGrid类,生成对象g g = sns.FacetGrid(career_data, col="姓名") plt.rcParams['font.sans-serif'] = ['SimHei'] g.map(plt.scatter,"抢断","得分")

分别在自己的坐标格上绘制
如上图,分别在每个坐标格上绘制出了抢断和得分之间的散点图。这就是FacetGrid的基本用法,就是根据子集数据分别占用坐标格绘制相应的图形,至于其他参数如hue等参数的用法跟之前文章中提到的一致,这里不再赘述。
PairGrid
学了格子绘图后,我们知道一个FacetGrid可以绘制出多达三个维度(row,col,和hue)的图形,但是当有一份数据集有很多变量,我们需要考察两两变量的之间关系时,是不是说我们要写很多重复的代码来实现不同变量之间的关系呢?比如我们研究抢断与得分、抢断与失误、抢断都犯规之间的关系时,是不是要不停的传不同的变量进去呢?答案是不需要,因为PairGrid这个类就可以帮我们实现以上的功能,它的主要功能就是绘制反映成对变量关系的子图。
首先,这个函数在实例化对象的时候也只需要传入DataFrame结构的数据集即可。这里我们还是用詹姆斯、杜兰特、伦纳德生涯数据,为了减少子图个数,这里我们只研究得分、抢断、篮板、助攻和失误几个变量间的关系,代码处理如下:
colum=["姓名","得分","篮板","助攻","抢断","失误"] data=career_data[colum] data.head()

处理数据预览
#实例化对象g,并有map函数绘制散点图 g = sns.PairGrid(data) g.map(plt.scatter);

成对散点图
如上图(一共有16个子图,这里全部展示看不清,故只截取一部分),横坐标和纵坐标的变量都是一样的,每个变量不同组合就反映了这两个变量之间的关系,其对角线上的子图变量相同。上面是散点图,我们再看下直方图的效果:
g=sns.PairGrid(data) g = g.map_diag(plt.hist, edgecolor="w") g = g.map_offdiag(plt.scatter, edgecolor="w", s=40)

直方图和散点图
如上图所示,map_diag()函数是绘制对角线上的单变量子图,mag_offdiag是绘制对角线以外的两个变量间的子图。到此为止,我们可视化部分内容全部讲完,后面开始讲解机器学习算法部分,在讲算法之前要穿插一些机器学习数学,感兴趣的小伙伴敬请期待!