Python数据可视化之Seaborn的安装及使用


Posted in Python onApril 19, 2022

1. 安装 seaborn

安装:

pip install seaborn

导入:

import seaborn as sns

2.准备数据

正式开始之前我们先用如下代码准备一组数据,方便展示使用。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
pd.set_option('display.unicode.east_asian_width', True)

df1 = pd.DataFrame(
    {'数据序号': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
     '厂商编号': ['001', '001', '001', '002', '002', '002', '003', '003', '003', '004', '004', '004'],
     '产品类型': ['AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC'],
     'A属性值': [40, 70, 60, 75, 90, 82, 73, 99, 125, 105, 137, 120],
     'B属性值': [24, 36, 52, 32, 49, 68, 77, 90, 74, 88, 98, 99],
     'C属性值': [30, 36, 55, 46, 68, 77, 72, 89, 99, 90, 115, 101]
    }
)
print(df1)

生成一组数据如下:

Python数据可视化之Seaborn的安装及使用

3.背景与边框

3.1 设置背景风格

设置风格使用的是sns.set_style()方法,且这里内置的风格,是用背景色表示名字的,但是实际内容不限于背景色。

sns.set_style()

可以选择的背景风格有:

  • whitegrid  白色网格
  • dark  灰色背景
  • white  白色背景
  • ticks  四周带刻度线的白色背景

sns.set()
sns.set_style(“darkgrid”)
sns.set_style(“whitegrid”)
sns.set_style(“dark”)
sns.set_style(“white”)
sns.set_style(“ticks”) 

其中sns.set()表示使用自定义样式,如果没有传入参数,则默认表示灰色网格背景风格。如果没有set()也没有set_style(),则为白色背景。

一个可能的bug:使用relplot()方法绘制出的图像,"ticks"样式无效。

3.2 其他

seaborn库是基于matplotlib库而封装的,其封装好的风格可以更加方便我们的绘图工作。而matplotlib库常用的语句,在使用seaborn库时也依然有效。

关于设置其他风格相关的属性,如字体,这里有一个细节需要注意的是,这些代码必须写在sns.set_style()的后方才有效。如将字体设置为黑体(避免中文乱码)的代码: 

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

如果在其后方设置风格,则设置好的字体会设置的风格覆盖,从而产生警告。其他属性也同理。

3.3 边框控制

sns.despine()方法

# 移除顶部和右部边框,只保留左边框和下边框
sns.despine()

# 使两个坐标轴相隔一段距离(以10长度为例)
sns.despine(offet=10,trim=True)

# 移除左边框
sns.despine(left=True)

# 移除指定边框 (以只保留底部边框为例)
sns.despine(fig=None, ax=None, top=True, right=True, left=True, bottom=False, offset=None, trim=False)

4. 绘制 散点图

使用seaborn库 绘制散点图,可以使用replot()方法,也可以使用scatter()方法。

replot方法的参数kind默认是’scatter’,表示绘制散点图。

hue参数表示 在该一维度上,用颜色区分

①对A属性值和数据序号绘制散点图,红色散点,灰色网格,保留左、下边框

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘SimHei']
sns.relplot(x=‘数据序号', y=‘A属性值', data=df1, color=‘red')
plt.show()

Python数据可视化之Seaborn的安装及使用

②对A属性值和数据序号绘制散点图,散点根据产品类型的不同显示不同的颜色,

白色网格,左、下边框:

sns.set_style(‘whitegrid')
plt.rcParams[‘font.sans-serif'] = [‘SimHei']
sns.relplot(x=‘数据序号', y=‘A属性值', hue=‘产品类型', data=df1)
plt.show()

Python数据可视化之Seaborn的安装及使用

③将A属性、B属性、C属性三个字段的值用不同的样式绘制在同一张图上(绘制散点图),x轴数据是[0,2,4,6,8…]

ticks风格(四个方向的框线都要),字体使用楷体

sns.set_style(‘ticks')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
df2 = df1.copy()
df2.index = list(range(0, len(df2)*2, 2))
dfs = [df2[‘A属性值'], df2[‘B属性值'], df2[‘C属性值']]
sns.scatterplot(data=dfs)
plt.show()

Python数据可视化之Seaborn的安装及使用

5. 绘制 折线图

使用seaborn库绘制折线图, 可以使用replot()方法,也可以使用lineplot()方法。

5.1 使用 replot()方法

sns.replot()默认绘制的是散点图,绘制折线图只需吧参数kind改为"line"。

①需求:绘制A属性值与数据序号的折线图,

灰色网格,全局字体为楷体;并调整标题、两轴标签 的字体大小,

以及坐标系与画布边缘的距离(设置该距离是因为字体没有显示完全):

sns.set(rc={‘font.sans-serif': “STKAITI”})
sns.relplot(x=‘数据序号', y=‘A属性值', data=df1, color=‘purple', kind=‘line')
plt.title(“绘制折线图”, fontsize=18)
plt.xlabel(‘num', fontsize=18)
plt.ylabel(‘A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

②需求:绘制不同产品类型的A属性折线(三条线一张图),whitegrid风格,字体楷体。

sns.set_style(“whitegrid”)
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.relplot(x=‘数据序号', y=‘A属性值', hue=‘产品类型', data=df1, kind=‘line')
plt.title(“绘制折线图”, fontsize=18)
plt.xlabel(‘num', fontsize=18)
plt.ylabel(‘A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

③需求:将A属性、B属性、C属性三个字段的值用不同的样式绘制在同一张图上(绘制折线图),x轴数据是[0,2,4,6,8…]

darkgrid风格(四个方向的框线都要),字体使用楷体,并加入x轴标签,y轴标签和标题。边缘距离合适。

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
df2 = df1.copy()
df2.index = list(range(0, len(df2)*2, 2))
dfs = [df2[‘A属性值'], df2[‘B属性值'], df2[‘C属性值']]
sns.relplot(data=dfs, kind=“line”)
plt.title(“绘制折线图”, fontsize=18)
plt.xlabel(‘num', fontsize=18)
plt.ylabel(‘A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

③多重子图

横向多重子图 col

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.relplot(data=df1, x=“A属性值”, y=“B属性值”, kind=“line”, col=“厂商编号”)
plt.subplots_adjust(left=0.05, right=0.95, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

纵向多重子图 row

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.relplot(data=df1, x=“A属性值”, y=“B属性值”, kind=“line”, row=“厂商编号”)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.95)
plt.show()

Python数据可视化之Seaborn的安装及使用

5.2 使用 lineplot()方法

使用lineplot()方法绘制折线图,其他细节基本同上,示例代码如下:

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.lineplot(x=‘数据序号', y=‘A属性值', data=df1, color=‘purple')
plt.title(“绘制折线图”, fontsize=18)
plt.xlabel(‘num', fontsize=18)
plt.ylabel(‘A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
df2 = df1.copy()
df2.index = list(range(0, len(df2)*2, 2))
dfs = [df2[‘A属性值'], df2[‘B属性值'], df2[‘C属性值']]
sns.lineplot(data=dfs)
plt.title(“绘制折线图”, fontsize=18)
plt.xlabel(‘num', fontsize=18)
plt.ylabel(‘A属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

6. 绘制直方图 displot()

绘制直方图使用的是sns.displot()方法

  • bins=6 表示 分成六个区间绘图
  • rug=True 表示在x轴上显示观测的小细条
  • kde=True表示显示核密度曲线
sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.displot(data=df1[[‘C属性值']], bins=6, rug=True, kde=True)
plt.title(“直方图”, fontsize=18)
plt.xlabel(‘C属性值', fontsize=18)
plt.ylabel(‘数量', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

随机生成300个正态分布数据,并绘制直方图,显示核密度曲线

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
np.random.seed(13)
Y = np.random.randn(300)
sns.displot(Y, bins=9, rug=True, kde=True)
plt.title(“直方图”, fontsize=18)
plt.xlabel(‘C属性值', fontsize=18)
plt.ylabel(‘数量', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

7. 绘制条形图 barplot()

绘制条形图使用的是barplot()方法

以产品类型 字段数据作为x轴数据,A属性值数据作为y轴数据。按照厂商编号字段的不同进行分类。

具体如下:

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.barplot(x=“产品类型”, y=‘A属性值', hue=“厂商编号”, data=df1)
plt.title(“条形图”, fontsize=18)
plt.xlabel(‘产品类型', fontsize=18)
plt.ylabel(‘数量', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

8. 绘制线性回归模型

绘制线性回归模型使用的是lmplot()方法。

主要的参数为x, y, data。分别表示x轴数据、y轴数据和数据集数据。

除此之外,同上述所讲,还可以通过hue指定分类的变量;

通过col指定列分类变量,以绘制 横向多重子图;

通过row指定行分类变量,以绘制 纵向多重子图;

通过col_wrap控制每行子图的数量;

通过size可以控制子图的高度;

通过markers可以控制点的形状。

下边对 X属性值 和 Y属性值 做线性回归,代码如下:

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.lmplot(x=“A属性值”, y=‘B属性值', data=df1)
plt.title(“线性回归模型”, fontsize=18)
plt.xlabel(‘A属性值', fontsize=18)
plt.ylabel(‘B属性值', fontsize=16)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

9. 绘制 核密度图 kdeplot()

9.1 一般核密度图

绘制和密度图,可以让我们更直观地看出样本数据的分布特征。绘制核密度图使用的方法是kdeplot()方法。

对A属性值和B属性值绘制核密度图,

将shade设置为True可以显示包围的阴影,否则只有线条。

sns.set_style(‘darkgrid')
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.kdeplot(df1[“A属性值”], shade=True, data=df1, color=‘r')
sns.kdeplot(df1[“B属性值”], shade=True, data=df1, color=‘g')
plt.title(“核密度图”, fontsize=18)
plt.xlabel(‘Value', fontsize=18)
plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9)
plt.show()

Python数据可视化之Seaborn的安装及使用

9.2 边际核密度图

绘制边际核密度图时使用的是sns.jointplot()方法。参数kind应为"kde"。使用该方法时,默认使用的是dark样式。且不建议手动添加其他样式,否则可能使图像无法正常显示。

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.jointplot(x=df1[“A属性值”], y=df1[“B属性值”], kind=“kde”, space=0)
plt.show()

Python数据可视化之Seaborn的安装及使用

10. 绘制 箱线图 boxplot()

绘制箱线图使用到的是boxplot()方法。

基本的参数有x, y, data。

除此之外 还可以有

hue 表示分类字段

width 可以调节箱体的宽度

notch 表示中间箱体是否显示缺口,默认False不显示。

鉴于前边的数据数据量不太够不便展示,这里再生成一组数据:

np.random.seed(13)
Y = np.random.randint(20, 150, 360)
df2 = pd.DataFrame(
{‘厂商编号': [‘001', ‘001', ‘001', ‘002', ‘002', ‘002', ‘003', ‘003', ‘003', ‘004', ‘004', ‘004'] * 30,
‘产品类型': [‘AAA', ‘BBB', ‘CCC', ‘AAA', ‘BBB', ‘CCC', ‘AAA', ‘BBB', ‘CCC', ‘AAA', ‘BBB', ‘CCC'] * 30,
‘XXX属性值': Y
}
)

生成好后,开始绘制箱线图:

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.boxplot(x=‘产品类型', y=‘XXX属性值', data=df2)
plt.show()

Python数据可视化之Seaborn的安装及使用

交换x、y轴数据后:

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.boxplot(y=‘产品类型', x=‘XXX属性值', data=df2)
plt.show()

可以看到箱线图的方向也随之改变

Python数据可视化之Seaborn的安装及使用

将厂商编号作为分类字段:

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.boxplot(x=‘产品类型', y=‘XXX属性值', data=df2, hue=“厂商编号”)
plt.show()

Python数据可视化之Seaborn的安装及使用

11. 绘制 提琴图 violinplot()

提琴图结合了箱线图和核密度图的特征,用于展示数据的分布形状。

使用violinplot()方法绘制提琴图。

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.violinplot(x=‘产品类型', y=‘XXX属性值', data=df2)
plt.show()

Python数据可视化之Seaborn的安装及使用

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.violinplot(x=‘XXX属性值', y=‘产品类型', data=df2)
plt.show()

Python数据可视化之Seaborn的安装及使用

plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
sns.violinplot(x=‘产品类型', y=‘XXX属性值', data=df2, hue=“厂商编号”)
plt.show()

Python数据可视化之Seaborn的安装及使用

12. 绘制 热力图 heatmap()

以双色球中奖号码数据为例绘制热力图,这里数据采用随机数生成。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
 
sns.set()
plt.figure(figsize=(6,6))
plt.rcParams[‘font.sans-serif'] = [‘STKAITI']
 
s1 = np.random.randint(0, 200, 33)
s2 = np.random.randint(0, 200, 33)
s3 = np.random.randint(0, 200, 33)
s4 = np.random.randint(0, 200, 33)
s5 = np.random.randint(0, 200, 33)
s6 = np.random.randint(0, 200, 33)
s7 = np.random.randint(0, 200, 33)
data = pd.DataFrame(
{‘一': s1,
‘二': s2,
‘三': s3,
‘四':s4,
‘五':s5,
‘六':s6,
‘七':s7
}
)
 
plt.title(‘双色球热力图')
sns.heatmap(data, annot=True, fmt=‘d', lw=0.5)
plt.xlabel(‘中奖号码位数')
plt.ylabel(‘双色球数字')
x = [‘第1位', ‘第2位', ‘第3位', ‘第4位', ‘第5位', ‘第6位', ‘第7位']
plt.xticks(range(0, 7, 1), x, ha=‘left')
plt.show()

Python数据可视化之Seaborn的安装及使用

到此这篇关于Python数据可视化之Seaborn的使用详解的文章就介绍到这了!

Python 相关文章推荐
Python中os.path用法分析
Jan 15 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
Python实现将不规范的英文名字首字母大写
Nov 15 Python
python编程线性回归代码示例
Dec 07 Python
Python使用pickle模块存储数据报错解决示例代码
Jan 26 Python
python实践项目之监控当前联网状态详情
May 23 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
python 批量将中文名转换为拼音
Feb 07 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
python 闭包函数详细介绍
Apr 19 #Python
Python  lambda匿名函数和三元运算符
Apr 19 #Python
Python使用mitmproxy工具监控手机 下载手机小视频
使用Python通过企业微信应用给企业成员发消息
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 #Python
python在package下继续嵌套一个package
Apr 14 #Python
Github 使用python对copilot做些简单使用测试
You might like
让PHP支持页面回退的两种方法
2008/01/10 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
试用php中oci8扩展
2015/06/18 PHP
自己动手开发jQuery插件教程
2011/08/25 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
python多进程共享变量
2016/04/06 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python内置函数OCT详解
2016/11/09 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
python实现文件的备份流程详解
2019/06/18 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
pytorch梯度剪裁方式
2020/02/04 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
英国家用电器购物网站:Hughes
2018/02/23 全球购物
高中语文教学反思
2014/01/16 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
节水宣传标语口号
2015/12/26 职场文书