Seaborn图表概述
Seaborn是一个基于Matplotlib的高级可视化效果库,偏向于统计图表。因此,针对的主要是数据挖掘和机器学习中的变量特征的选取
。相比Matplotlib,Seaborn的语法相对简单,绘制图表不需要花很多功夫去修饰,但是它绘图方式比较局限,不够灵活。
Seaborn的主要功能
1、计算多变量间关系的面向数据集接口。
2、可视化类别变量的观测与统计。
3、可视化单变量或多变量分布,并与其子数据集比较。
4、控制线性回归的不同因变量,并进行参数估计与作图。
5、对复杂数据进行整体结构可视化。
6、对多表统计图的制作高度抽象,并简化可视化过程。
7、提供多个主题渲染Matplotlib图表的样式。
8、提供调色板工具生动再现数据。
绘制简单的柱形图
dart
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid')
plt.figure(figsize=(4, 3))
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]
sns.barplot(x=x,y=y)
plt.show()
Seaborn基本设置
背景风格------axes_style()函数、set_style()函数
设置Seaborn背景风格,主要使用axes_style()函数
和set_style()函数
。Seaborn有5个主题,适用于不同的应用场景和人群偏好,具体如下。
- darkgrid:灰色网格(默认值)。
- whitegrid:白色网格。
- dark:灰色背景。
- white:白色背景。
- ticks:四周带刻度线的白色背景。
边框控制------despine()函数
控制边框显示方式,主要使用despine()函数。
python
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid')
plt.figure(figsize=(5,3)) #画布长5,宽3
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]
sns.despine(fig=None,ax=None,top=None,right=True,left=True,bottom=False,offset=None,trim=False) #offset表示偏离左侧轴的距离
sns.barplot(x=x,y=y)
plt.show()
绘制折线图(replot()函数)
在Seaborn中实现折线图有两种方法:
- 在relplot()函数中通过设置kind参数为line绘制折线图;
- 使用lineplot()函数直接绘制折线图。 语法如下:
css
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='auto', kind='scatter', height=5,
aspect=1,facet_kws=None, units=None, **kwargs)
参数说明:
- x, y:x,y轴上的数据
- hue:将生成具有不同颜色的元素的分组变量。可以是按类别的(categorical),也可以是数字的,不过在后一种情况下,颜色映射的行为会有所不同
- data:输入数据结构。要么是可以分配给命名变量的向量的长形式集合,要么是将进行内部整形的宽形式数据集
- kind:需要绘制的图
单折线图
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid') # 灰色网格
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
df1 = pd.read_excel('data.xls') #导入文件
# 绘制折线图
sns.relplot(x='学号',y='语文',kind='line',data=df1) #折线图:relplot(kind='line')或者直接使用lineplot()
plt.show()
多折线图
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid') # 灰色网格
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
df1 = pd.read_excel('data.xls') #导入文件
dfs = [df1['语文'],df1['数学'],df1['英语']] #将多个Series对象合并
sns.lineplot(data=dfs)
plt.show()
绘制直方图(displot()函数)
Seaborn主要通过使用displot()函数绘制直方图,语法如下:
css
seaborn.displot(a,bins=None,hist=True,kde=True,rug=False,fit=None,
hist_kws=None,kde_kws=None,rug_kws=None,fit_kws=None,color=None,
vertical=False,norm_hist=False,axlabel=None,label=None,ax=None)
常用参数说明:
- data:表示要观察的数据,可以是Series、一维数组或列表
- bins:用于控制条形的数量
- hist:接收布尔类型,表示是否绘制(标注)直方图
- kde:接收布尔类型,表示是否绘制高斯核密度估计曲线
- rug:接收布尔类型,表示是否在支持的轴方向上绘制rugplot
- fit: 拟合的参数分布图形
kotlin
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
df1 = pd.read_excel('data2.xls') #导入文件
data = df1[['得分']]
sns.displot(data=data,rug=True)
plt.show()
绘制条形图(barplot()函数)
条形图主要展现的每个矩形高度的数值变量中心趋势的估计,只显示平均值(或者其他估计值),但在很多情况下,每个分类变量级别上显示值的分布可能提供更多信息。
语法如下:
css
seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
estimator=<function mean>, ci=95, n_boot=1000, units=None,
orient=None, color=None, palette=None, saturation=0.75, errcolor='.26',
errwidth=None, capsize=None, dodge=True,ax=None, **kwargs)
参数说明:
- x,y,hue:数据字段变量名
- data:DataFrame(数组或数组列表)
- order,hue_order:字符串列表,显示指定分类顺序
- estimator:可回调函数,设置每个分类箱的统计函数
- ci:在估计值附近绘制置信区间的大小,可选参数为float或者'sd'或者None
- n_boot:int,计算置信区间时使用的引导迭代次数
- orient:v | h,图显示方向(垂直或水平)
- color:设置颜色
- palette:调试板名称,列表或者字典类型,设置hue指定变量的不同级别的颜色
- saturation:饱和度,float类型
- errcolor:表示置信区间的线条颜色
- errwidth:float类型,表示误差线的厚度
- capsize:表示误差线上横线的宽度
- dodge:bool类型,使用色调嵌套时,是否沿分类轴移动元素
绘制条形图
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid')
plt.figure(figsize=(10,5))
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
df1 = pd.read_excel('data.xls',sheet_name='sheet2') #导入文件
sns.barplot(x='学号',y='得分',hue='学科',data=df1)
plt.show()
绘制散点图(replot()函数)
Seaborn主要通过使用replot()函数绘制散点图,相关语法可参考"绘制折线图"。
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
# 加载布置数据集tips(小费数据集),并对total_bill和tip字段绘制散点图
# tips = sns.load_dataset('tips')
tips = pd.read_csv('tips.csv')
sns.relplot(x='total_bill',y='tip',kind='scatter',data=tips) #kind='scatter'可以省略,默认散点图,kind='line'是折线图
plt.show()
绘制线性回归模型(impolt()函数)
Seaborn主要通过使用lmpolt()函数,可以直接绘制线性回归模型,用以描述线性关系,语法如下:
ini
seaborn.lmplot(x, y, data, hue=None,
col=None, row=None, palette=None,
col_wrap=None, height=5, aspect=1,
markers='o', sharex=True, sharey=True,
hue_order=None, col_order=None, row_order=None,
legend=True, legend_out=True, x_estimator=None,
x_bins=None, x_ci='ci', scatter=True, fit_reg=True,
ci=95, n_boot=1000, units=None, order=1,
logistic=False, lowess=False, robust=False,
logx=False, x_partial=None, y_partial=None,
truncate=False, x_jitter=None, y_jitter=None,
scatter_kws=None, line_kws=None, size=None)
常用参数说明:
- hue: 散点图中的分类字段
- col:列分类变量,构成子集
- row:行分类变量
- col_wrap: 控制每行子图数量
- size:控制子图高度
- markers:点的形状
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
# 加载布置数据集tips(小费数据集),并对total_bill和tip字段绘制散点图
# tips = sns.load_dataset('tips')
tips = pd.read_csv('tips.csv')
sns.lmplot(x='total_bill',y='tip',data=tips)
plt.show()
绘制箱型图(boxplot()函数)
Seaborn主要使用boxplot()函数绘制箱形图,语法如下:
css
seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None,
hue_order=None, orient=None, color=None, palette=None, saturation=0.75,
width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False,
ax=None, **kwargs)
常用参数说明:
- hue:分类字段
- width:箱形图高度
- notch:中间箱体是否显示缺口,默认值是Flase
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
# 加载布置数据集tips(小费数据集),并对total_bill和tip字段绘制散点图
tips = pd.read_csv('tips.csv')
sns.boxplot(x='day',y='total_bill',hue='time',data=tips)
plt.show()
从上图可得知,数据存在异常值,箱形图实际上就是利用数据的分位数来识别数据的异常点,这一特点使得箱形图在学术界和工业界的应用十分广泛。
绘制核密度图(kdeplot()函数)
核密度是概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度图可以比较直观地看出数据样本本身的分布特征。
Seaborn主要通过使用kdeplot()函数绘制核密度图,语法如下:
ini
sns.kdeplot(data,shade=True)
参数说明:
- data: 数据
- shade: 是否带阴影,默认值是True,带阴影
核密度图
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid')
#读取数据集iris
df=pd.read_csv('iris.csv')
#显示数据集
print(df.head())
#绘制多个变量的核密度图
p1=sns.kdeplot(df['sepal_width'], fill=True, color="r")
p2=sns.kdeplot(df['sepal_length'], fill=True, color="b")
plt.show()
边际密度图
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
sns.set_style('darkgrid')
#读取数据集iris
df=pd.read_csv('iris.csv')
#边际核密度图
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='kde',space=0)
plt.show()
绘制提琴图(violinpolt()函数)
提琴图结合了箱形图和核密度图的特征,用于展示数据的分布形状。粗黑线表示四分数范围,延伸的细线表示95%的置信区间,白点为中位数,提琴图弥补了箱形图的不足,可以展示数据分布是双模还是多模,提琴图主要使用violinplot()函数绘制。
语法如下:
ini
seaborn.violinplot(x=None, y=None, hue=None,
data=None, order=None, hue_order=None,
bw='scott', cut=2, scale='area', scale_hue=True,
gridsize=100, width=0.8, inner='box', split=False,
dodge=True, orient=None, linewidth=None,
color=None, palette=None, saturation=0.75,
ax=None, **kwargs)
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl
mpl.use('TkAgg')
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
sns.set_style('darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
# 加载布置数据集tips(小费数据集),并对total_bill和tip字段绘制散点图
# tips = sns.load_dataset('tips')
tips = pd.read_csv('tips.csv')
sns.violinplot(x='total_bill',y='day',hue='time',data=tips)
plt.show()