Seaborn可视化数据分析

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中实现折线图有两种方法:

  1. 在relplot()函数中通过设置kind参数为line绘制折线图;
  2. 使用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)

常用参数说明:

  1. data:表示要观察的数据,可以是Series、一维数组或列表
  2. bins:用于控制条形的数量
  3. hist:接收布尔类型,表示是否绘制(标注)直方图
  4. kde:接收布尔类型,表示是否绘制高斯核密度估计曲线
  5. rug:接收布尔类型,表示是否在支持的轴方向上绘制rugplot
  6. 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)

参数说明:

  1. x,y,hue:数据字段变量名
  2. data:DataFrame(数组或数组列表)
  3. order,hue_order:字符串列表,显示指定分类顺序
  4. estimator:可回调函数,设置每个分类箱的统计函数
  5. ci:在估计值附近绘制置信区间的大小,可选参数为float或者'sd'或者None
  6. n_boot:int,计算置信区间时使用的引导迭代次数
  7. orient:v | h,图显示方向(垂直或水平)
  8. color:设置颜色
  9. palette:调试板名称,列表或者字典类型,设置hue指定变量的不同级别的颜色
  10. saturation:饱和度,float类型
  11. errcolor:表示置信区间的线条颜色
  12. errwidth:float类型,表示误差线的厚度
  13. capsize:表示误差线上横线的宽度
  14. 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)

常用参数说明:

  1. hue: 散点图中的分类字段
  2. col:列分类变量,构成子集
  3. row:行分类变量
  4. col_wrap: 控制每行子图数量
  5. size:控制子图高度
  6. 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)

常用参数说明:

  1. hue:分类字段
  2. width:箱形图高度
  3. 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()
相关推荐
沐霜枫叶1 小时前
解决pycharm无法识别miniconda
ide·python·pycharm
途途途途2 小时前
精选9个自动化任务的Python脚本精选
数据库·python·自动化
蓝染然2 小时前
jax踩坑指南——人类早期驯服jax实录
python
许野平2 小时前
Rust: enum 和 i32 的区别和互换
python·算法·rust·enum·i32
问道飞鱼2 小时前
【Python知识】Python进阶-什么是装饰器?
开发语言·python·装饰器
AI视觉网奇3 小时前
Detected at node ‘truediv‘ defined at (most recent call last): Node: ‘truediv‘
人工智能·python·tensorflow
GuYue.bing3 小时前
网络下载ts流媒体
开发语言·python
牛顿喜欢吃苹果3 小时前
linux创建虚拟串口
python
-Mr_X-3 小时前
FFmpeg在python里推流被处理过的视频流
python·ffmpeg
一个不秃头的 程序员4 小时前
代码加入SFTP JAVA ---(小白篇3)
java·python·github