Seaborn基于 Matplotlib核心库进行了更高级的API封装,可以轻松地画出更漂亮的图形,而Seaborn的漂亮主要体现在配色更加舒服,以及图 形元素的样式更加细腻。
首先需要安装seaborn
# 安装 pip3 install seaborn
# 导入 import seaborn as sns
可以采用最简单的直方图描述单变量的分布情况。 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。
两个变量的二元分布可视化也很有用。在 Seaborn中最简单的方法是使用 jointplot()函数,该函数可以创建一个多面板图形,比如散点图、二 维直方图、核密度估计等,以显示两个变量之间的双变量关系及每个变量在单坐标轴上的单变量分布。
jointplot()函数的语法格式如下。
seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, ratio=5, space=0.2, dropna=True)
上述函数中常用参数的含义如下:
(1) kind:表示绘制图形的类型。
(2) stat_func:用于计算有关关系的统计量并标注图。
(3) color:表示绘图元素的颜色。
(4) size:用于设置图的大小(正方形)。
(5) ratio:表示中心图与侧边图的比例。该参数的值越大,则中心图的占比会越大。
(6) space:用于设置中心图与侧边图的间隔大小。
import numpy as np
import pandas as pd
import seaborn as sns # 创建DataFrame对象
dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})
# 绘制散布图
sns.jointplot(x="x", y="y", data=dataframe_obj)
sns.jointplot("x","y",data=df,kind="hex")
sns.jointplot("x","y",data=df,kind="kde")
通过观等高线的颜色深浅,可以看出哪个范围的数值分布的最多,哪个范围的数值分布的最少
要想在数据集中绘制多个成对的双变量分布,则可以使用pairplot()函数实现,该函数会创建一个坐标轴矩阵,并且显示Datafram对象中每对变 量的关系。另外,pairplot()函数也可以绘制每个变量在对角轴上的单变量分布。
dataset=sns.load_dataset("iris")
dataset.head()
sns.pairplot(dataset)
数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示
Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:
通过 stripplot()函数可以画一个散点图, stripplot0函数的语法格式如下。
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False)
上述函数中常用参数的含义如下
(1) x,y,hue:用于绘制长格式数据的输入。
(2) data:用于绘制的数据集。如果x和y不存在,则它将作为宽格式,否则将作为长格式。
(3) jitter:表示抖动的程度(仅沿类別轴)。当很多数据点重叠时,可以指定抖动的数量或者设为Tue使用默认值。
data=sns.load_dataset("tips")
data.head()
sns.stripplot(x="day", y="total_bill", data=tips)
从上图中可以看出,图表中的横坐标是分类的数据,而且一些数据点会互相重叠,不易于观察。为了解决这个问题,可以在调用striplot()函数时 传入jitter参数,以调整横坐标的位置,改后的示例代码如下。
sns.stripplot(x="day",y="total_bill",data=data,hue="time",jitter=True)
sns.swarmplot("day","total_bill",data=data)
要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查 看:
seaborn中用于绘制箱形图的函数为 boxplot(),其语法格式如下:
seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)
常用参数的含义如下:
使用 boxplot()函数绘制箱形图的具体示例如下。
sns.boxplot(x=“day”, y=“total_bill”, data=tips)
上述示例中,使用 seaborn中内置的数据集tips绘制了一个箱形图,图中x轴的名称为day,其刻度范围是 Thur~Sun(周四至周日),y轴的名称为 total_bill,刻度范围为10-50左右
sns.boxplot("day","total_bill",data=data,hue="time",palette=["g","r"],saturation=0.9)
从图中可以看出,
Thur列大部分数据都小于30,不过有5个大于30的异常值,
Fri列中大部分数据都小于30,只有一个异常值大于40,
Sat一列中有3个大于40的异常值,
Sun列中有两个大于40的异常值
sns.violinplot("day","total_bill",data=data)
最常用的查看集中趋势的图形就是条形图。默认情况下, barplot函数会在整个数据集上使用均值进行估计。若每个类别中有多个类别时(使用 了hue参数),则条形图可以使用引导来计算估计的置信区间(是指由样本统计量所构造的总体参数的估计区间),并使用误差条来表示置信区 间。
sns.barplot("day","total_bill",data=data)
另外一种用于估计的图形是点图,可以调用 pointplot()函数进行绘制,该函数会用高度低计值对数据进行描述,而不是显示完整的条形,它只 会绘制点估计和置信区间。
sns.pointplot("day","total_bill",data=data)