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基础教程之lambda表达式使用方法
Feb 12 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
Tensorflow之Saver的用法详解
Apr 23 Python
Python实现的读写json文件功能示例
Jun 05 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 Python
python利用tkinter实现图片格式转换的示例
Sep 28 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
php提交post数组参数实例分析
2015/12/17 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
JS之相等操作符详解
2016/09/13 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python如何调用JS文件中的函数
2019/08/16 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
详解Python中namedtuple的使用
2020/04/27 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
委托协议书范本
2014/04/22 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
先进个人申报材料
2014/12/30 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记