Matplotlib虽然已经是比较优秀的绘图库了,但是它有个今人头疼的问题,那就是API使用过于复杂,它里面有上千个函数和参数,属于典型的那种可以用它做任何事,却无从下手。
Seaborn基于 Matplotlib核心库进行了更高级的API封装,可以轻松地画出更漂亮的图形,而Seaborn的漂亮主要体现在配色更加舒服,以及图形元素的样式更加细腻。
不过,使用Seaborn绘制图表之前,需要安装和导入绘图的接口,具体代码如下:
#安装
pip3installseaborn
#导入
importseabornassns
Seaborn库的可视化数据分布
当处理一组数据时,通常先要做的就是了解变量是如何分布的。
对于单变量的数据来说采用直方图或核密度曲线是个不错的选择,对于双变量来说,可采用多面板图形展现,比如散点图、二维直方图、核密度估计图形等。
针对这种情况,Seaborn库提供了对单变量和双变量分布的绘制函数,如displot()函数、jointplot()函数,下面来介绍这些函数的使用。
绘制单变量分布
可以采用最简单的直方图描述单变量的分布情况。Seaborn中提供了distplot()函数,它默认绘制的是一个带有核密度估计曲线的直方图。distplot()函数的语法格式如下。
seaborn.distplot(a,bins=None,hist=True,kde=True,rug=False,fit=None,color=None)
上述函数中常用参数的含义如下:
(1)a:表示要观察的数据,可以是Series、一维数组或列表。
(2)bins:用于控制条形的数量。
(3)hist:接收布尔类型,表示是否绘制(标注)直方图。
(4)kde:接收布尔类型,表示是否绘制高斯核密度估计曲线。
(5)rug:接收布尔类型,表示是否在支持的轴方向上绘制rugplot。
通过distplot())函数绘制直方图的示例如下。
importnumpyasnp
sns.set()
np.random.seed(0)#确定随机数生成器的种子,如果不使用每次生成图形不一样
arr=np.random.randn(100)#生成随机数组
ax=sns.distplot(arr,bins=10,hist=True,kde=True,rug=True)#绘制直方图
上述示例中,首先导入了用于生成数组的numpy库,然后使用seaborn调用set()函数获取默认绘图,并且调用random模块的seed函数确定随机数生成器的种子,保证每次产生的随机数是一样的,接着调用randn()函数生成包含100个随机数的数组,最后调用distplot()函数绘制直方图。
上图中看出:
直方图共有10个条柱,每个条柱的颜色为蓝色,并且有核密度估计曲线。
根据条柱的高度可知,位于-1-1区间的随机数值偏多,小于-2的随机数值偏少。
通常,采用直方图可以比较直观地展现样本数据的分布情况,不过,直方图存在一些问题,它会因为条柱数量的不同导致直方图的效果有很大的差异。为了解决这个问题,可以绘制核密度估计曲线进行展现。
核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,可以比较直观地看出数据样本本身的分布特征。
通过distplot()函数绘制核密度估计曲线的示例如下。
#创建包含500个位于[0,100]之间整数的随机数组
array_random=np.random.randint(0,100,500)
#绘制核密度估计曲线
sns.distplot(array_random,hist=False,rug=True)
上述示例中,首先通过random.randint()函数返回一个最小值不低于0、最大值低于100的500个随机整数数组然后调用displot()函数绘制核密度估计曲线。 运行结果如图所示。
从上图中看出,图表中有一条核密度估计曲线,并且在x轴的上方生成了观测数值的小细条。