前言:
💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析的数据可视化,本篇文章主要讲述了:掌握Pandas高级可视化技巧等等。欢迎大家一起探索讨论!!!
💞💞代码是你的画笔,创新是你的画布,用它们绘出属于你的精彩世界,不断挑战,无限可能!
个人主页⭐: 书生♡
gitee主页🙋♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬
1.Matplotlib数据可视化
一图胜千言,人是一个视觉敏感的动物,大多数人对数字无法在较短的时间内找到规律和业务意义,可视化就势在必行。视觉化效应 (Visual effects) 是指人类认知过程中,只要将非视觉性信息转化成视觉信息,可以大大增强海马体的记忆与前额叶皮质的思维反应速度。
- Pandas的数据可视化依赖于matplotlib模块的pyplot类,在安装Pandas时会自动安装Matplotlib
- Matplotlib是一个专门的绘图可视化包,可以对图形做细节控制,绘制出出版质量级别的图形,通过Matplotlib,可以简单地绘制出常用的统计图形。
- 除了Matplotlib以外还有很多用于可视化的包,比如Seaborn、Pyecharts
Matplotlib(功能强大,代码相对复杂)
- Matplotlib是Python编程语言的开源绘图库。它是Python可视化软件包中最突出的,使用最广泛的绘图工具。
- Matplotlib在执行各种任务方面非常高效。可以将可视化文件导出为所有常见格式(PDF,SVG,JPG,PNG,BMP和GIF)。
- Matplotlib可以创建流行的可视化类型-折线图,散点图,直方图,条形图,误差图,饼图,箱形图以及更多其他类型的图,还支持3D绘图。
- 许多Python库都是基于Matplotlib构建的,Pandas和Seaborn是在Matplotlib上构建的
- Matplotlib项目由John Hunter于2002年启动。Matplotlib最初是在神经生物学的博士后研究期间开始可视化癫痫患者的脑电图(ECoG)数据。
1.1 Matplotlib方法说明
基本使用
- 调用接口
- 通过对象
在 Matplotlib 中,无论是使用面向过程的 pyplot 接口,还是面向对象的方式,每一步操作都对应着特定的方法。下面我将分别详细介绍这两种方式下的步骤和方法格式:
1.1.1 调用接口
-
导入模块
import matplotlib.pyplot as plt
-
创建数据
使用 Numpy 或其他数据处理库创建数据。import numpy as np x = np.linspace(0, 10, 100) # 生成从0到10的100个点的等差数列 y = np.sin(x) # 应用正弦函数
-
创建图形
虽然不是必须的,但plt.figure()
可用于创建一个新的图形窗口。plt.figure()
-
绘制图形
使用plot
方法绘制线图。plt.plot(x, y) # 默认情况下,这将在当前图形上绘图
-
添加图例
如果有多个数据系列,可以使用label
参数并在最后调用legend
方法。plt.plot(x, y, label='sin(x)') plt.legend()
-
设置标题和坐标轴标签
plt.title('Sine Wave') # 设置图形标题 plt.xlabel('x-axis') # 设置x轴标签 plt.ylabel('y-axis') # 设置y轴标签
-
显示图形
plt.show() # 显示图形
1.1.2 面向对象的绘图
-
导入模块
import matplotlib.pyplot as plt import numpy as np
-
创建数据
同面向过程的绘图。 -
创建 Figure 和 Axes 对象
fig = plt.figure() # 创建 Figure 对象 ax = fig.add_subplot(111) # 添加一个 Axes 对象,111表示一个1x1网格中的第一个图
-
绘制图形
使用 Axes 对象的plot
方法。ax.plot(x, y) # 在 Axes 对象上绘图
-
添加图例
ax.plot(x, y, label='sin(x)') ax.legend()
-
设置标题和坐标轴标签
ax.set_title('Sine Wave') # 设置 Axes 的标题 ax.set_xlabel('x-axis') # 设置x轴标签 ax.set_ylabel('y-axis') # 设置y轴标签
-
显示图形
plt.show() # 显示图形
在面向对象的绘图中,所有的绘图操作都是通过 Axes
对象来进行的,这样可以更精细地控制每个图形的细节。
1.2 Matplotlib绘图入门
创建数据:
import pandas as pd
import matplotlib.pyplot as plt
x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标
注意我们的操作要在一个单元格内实现,分开的话实现不了,但是为了讲解用法,下面会一步一步的讲述,实现的最终效果以最后总的效果为主
1.2.1 调用方法实现
- 创建画布大小
plt.figure(figsize= (横坐标长度,纵坐标长度))
# 创建画布对象,调整画布大小
plt.figure(figsize= (16,8))
- 设置轴刻度
plt.xlim(起始坐标,结束坐标)
plt.ylim(起始坐标,结束坐标)
# 设置轴刻度
# 设置x轴坐标的范围,设置y轴坐标的范围
plt.xlim(-3,8)
plt.ylim(0,10)
- 设置轴标签
plt.xlabel('坐标轴名称',fontsize=数值)
plt.ylabel('坐标轴名称',fontsize=数值)
# 设置轴标签
plt.xlabel('X axis',fontsize=10)
plt.ylabel('Y axis',fontsize=20)
- 设计标题
plt.title('标题名',fontsize=数值)
# 设置标题
plt.title('My first plot',fontsize=20)
- 总的实现
# 总的
# 忽略warnings
warnings.filterwarnings('ignore')
# 原始数据
x = [-3,5,7]
y = [10,2,5]
# 创建画布对象,调整画布大小
plt.figure(figsize= (20,10))
# 绘制折现图
plt.plot(x,y)
# 设置轴刻度
# 设置x轴坐标的范围,设置y轴坐标的范围
plt.xlim(-3,8)
plt.ylim(0,10)
# 设置轴标签
plt.xlabel('X axis',fontsize=25)
plt.ylabel('Y axis',fontsize=25)
# 设置标题
plt.title('My first plot标题',fontsize=20)
1.2.2 面向对象的方式进行绘图
方法都是一样的,只不过我们用面向对象实现的话,需要先创建互补对象和轴对象
画布对象名,轴对象名 = plt.subplots(figsize=(长,高))
fig,ax = plt.subplots(figsize=(20,10))
其他的方法就是使用轴对象调用方法,方法名是在前面加上一个set的前缀
# 创建画布对象,调整画布大小
# 创建画布对象和轴对象
fig,ax = plt.subplots(figsize=(20,10))
# 在轴对象上进行绘图
ax.plot(x,y)
# 设置轴刻度范围
ax.set_xlim(-3,8)
ax.set_ylim(0,10)
# 设置轴标签
ax.set_xlabel('X axis',fontsize=25)
ax.set_ylabel('Y axis',fontsize=25)
# 设置标题
ax.set_title('My first plot标题',fontsize=20)
1.3 Matplotlib 通过内置数据集 绘图案例
通过著名的Anscombe数据集说明数据可视化的重要性:数据可视化可以更直观的展示数据,让你的分析和处理更加准确。
- Anscombe数据集由英国统计学家Frank Anscombe创建。该数据集内置与seaborn模块中,在加载的时候,需要从网上下载该数据集,所以会有一定耗时
- Anscombe数据集包含4组数据,每组数据包含两个连续变量。每组数据的平均值、方差、相关性都相同,但是当它们可视化后,就会发现每组数据的分布明显不同。
- 导包并加载数据集,获取4组子集的df对象
# 导包
import pandas as pd
import seaborn as sns # Anaconda内置,无需额外安装
import matplotlib.pyplot as plt # Anaconda内置,无需额外安装
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
anscombe = sns.load_dataset('anscombe', data_home='../data/seaborn-data/')
# 查看数据集
print(anscombe.head())
- 统计不同dataset类别 x和y列平均值, 标准差等
# 统计不同dataset类别 x和y列平均值, 标准差等
anscombe.groupby(by='dataset').describe()
- 获取四份数据子集
# 获取四份数据子集
dataset_1 = anscombe[anscombe['dataset'] == 'I']
dataset_2 = anscombe[anscombe['dataset'] == 'II']
dataset_3 = anscombe[anscombe['dataset'] == 'III']
dataset_4 = anscombe.query('dataset=="IV"')
dataset_1 # 显示数据子集1
- 创建画布对象,包含4个子图对象
#%%
# 创建画布对象
fig = plt.figure(figsize=(20,10))
# 创建子图对象
#行数,列数,位置
axis1 = fig.add_subplot(2,2,1)#子图1有两行两列,位置是1
axis2 = fig.add_subplot(2,2,2)#子图2有两行两列,位置是2
axis3 = fig.add_subplot(2,2,3)#子图3有两行两列,位置是3
axis4 = fig.add_subplot(2,2,4)#子图4有两行两列,位置是4
- 设置标题
fig.suptitle('Anscombe Data',fontsize=20)
- 设置小标题
# 设置小标题
axis1.set_title('dataset_1',fontsize=20)
axis2.set_title('dataset_2',fontsize=20)
axis3.set_title('dataset_3',fontsize=20)
axis4.set_title('dataset_4',fontsize=20)
- 绘制散点图
# 绘制散点图
axis1.plot(dataset_1['x'],dataset_1['y'],'o')
axis2.plot(dataset_2['x'],dataset_2['y'],'o')
axis3.plot(dataset_3['x'],dataset_3['y'],'o')
axis4.plot(dataset_4['x'],dataset_4['y'],'o')
- 总的
dataset_1
# 创建画布对象
fig = plt.figure(figsize=(20, 10))
# 创建子图对象
#行数,列数,位置
axis1 = fig.add_subplot(2, 2, 1)
axis2 = fig.add_subplot(2, 2, 2)
axis3 = fig.add_subplot(2, 2, 3)
axis4 = fig.add_subplot(2, 2, 4)
# 设置标题
fig.suptitle('Anscombe Data',fontsize=20)
# 设置小标题
axis1.set_title('dataset_1',fontsize=20)
axis2.set_title('dataset_2',fontsize=20)
axis3.set_title('dataset_3',fontsize=20)
axis4.set_title('dataset_4',fontsize=20)
# 绘制散点图
axis1.plot(dataset_1['x'],dataset_1['y'],'o')
axis2.plot(dataset_2['x'],dataset_2['y'],'o')
axis3.plot(dataset_3['x'],dataset_3['y'],'o')
axis4.plot(dataset_4['x'],dataset_4['y'],'o')
扩展:
创建对象的另外一种写法:
fig,((axis1,axis2),(axis3,axis4)) = plt.subplots(2,2,figsize=(20,1
1.4 使用Matplotlib绘制统计图
加载数据:
tips = sns.load_dataset(name='tips',data_home='../data/seaborn_data')
tips.head()
1.4.1 单变量直方图
单变量
- 在统计学属于中,‘单变量’(univariate)指单个变量
直方图
- 直方图是观察单个变量最常用的方法。这些值是经过"装箱"(bin)处理的
- 直方图会将数据分组后绘制成图来显示变量的分布状况
hist 直方图,x 列值,bins 直方图的柱子个数
- 指定bins的个数
fig = plt.figure(figsize=(20,10))
axis= fig.add_subplot(1,1,1)
# hist 直方图,x 列值,bins 直方图的柱子个数
axis.hist(x=tips['total_bill'],bins=10)
- 自定义直方图柱子,自定义bins列表
fig = plt.figure(figsize=(20,10))
axis= fig.add_subplot(1,1,1)
# hist 直方图,x 列值,bins 直方图的柱子个数
# 自定义直方图柱子 bins=[3,10,20,30,40,50]
axis.hist(x=tips['total_bill'],bins=[3,10,20,30,40,50])
axis.set_title('total_bill',fontsize=20)
axis.set_xlabel('total_bill',fontsize=20)
axis.set_ylabel('count',fontsize=20)
1.4.2 双变量
- 双变量(bivariate)指两个变量
散点图
- 散点图用于表示一个连续变量随另一个连续变量的变化所呈现的大致趋势
fig = plt.figure(figsize=(20,10))
axis= fig.add_subplot(1,1,1)
# hist 散点图,x 列值,y 列值
axis.scatter(x=tips['total_bill'],y=tips['tip'])
axis.set_title('total_bill',fontsize=20)
axis.set_xlabel('total_bill',fontsize=20)
axis.set_ylabel('count',fontsize=20)
1.4. 3 多变量
多变量图 -> 多列数据进行绘图, 第三个变量可以使用颜色区分, 第四个变量可以使用大小
# 多变量图 -> 多列数据进行绘图, 第三个变量可以使用颜色区分, 第四个变量可以使用大小
fig, ax = plt.subplots(figsize=(16, 8))
# s:大小 数值列
# c:颜色 数值列
ax.scatter(x=tips['total_bill'], y=tips['tip'], s=tips['size']*30,c=tips['size'])
ax.set_title('Histogram of Total Bill')
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')
plt.show()
1.5 Pandas内置Matplotlib
- df.plot.line() # 折线图的全写方式
- df.plot.bar() # 柱状图
- df.plot.barh() # 横向柱状图 (条形图)
- df.plot.hist() # 直方图
- df.plot.box() # 箱形图
- df.plot.kde() # 核密度估计图
- df.plot.density() # 同 df.plot.kde()
- df.plot.area() # 面积图
- s.plot.pie() # 饼图
- df.plot.scatter() # 散点图
- df.plot.hexbin() # 六边形箱体图,或简称六边形图
1.6 解决中文显示以及关闭警告
我们在设置标题的时候,会出现中文,如果不设置会发生错误
- 忽略警告
import warnings
# 忽略warnings
warnings.filterwarnings('ignore')
- 改变字体即可正常显示中文
将
simhei.ttf
字体文件放到
/export/server/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf
目录下
修改
/export/server/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data
目录下的matplotlibrc
文件
vim matplotlibrc
# 增加以下内容
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode_minus : False
删除
/root/.cache
目录下的matplotlib
文件
cd /root/.cache
rm -rf matplotlib
2. pandas 绘图
2.1 折线图 – line
- df/s.plot(kind=)
- df/s.plot.bar/line.plot()
加载数据:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
anscombe = sns.load_dataset('anscombe', data_home='../data/seaborn-data/')
df1 = anscombe[anscombe['dataset']=='I']
df1
绘制df折线图:
kind 指定了绘图类型,但是不指定x,y,那么就以索引值为x轴,y轴为列值,如果有多列值,就会有多条线
# kind 指定了绘图类型,但是不指定x,y,那么就以索引值为x轴,y轴为列值,如果有多列值,就会有多条线
df1.plot(kind='line',x='x',y='y',figsize=(20,10))
Series.plot()绘图,x轴是索引值,y轴是列值绘制
# Series.plot()绘图,x轴是索引值,y轴是列值
df1['x'].plot()
2.2 柱状图
df.plot(kind=‘bar’,figsize=(长,宽))
加载数据:
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
anscombe = sns.load_dataset('anscombe', data_home='../data/seaborn-data/')
df1 = anscombe[anscombe['dataset']=='I']
df1
柱状图
反映不同类别的情况, 不同类别就是柱子个数(x轴), 情况就是柱子的高度(y轴)
不同颜色代表不同列
柱子数量代表列值个数
柱子高度代表列值
# 柱状图
# 反映不同类别的情况, 不同类别就是柱子个数(x轴), 情况就是柱子的高度(y轴)
# 不同颜色代表不同列
# 柱子数量代表列值个数
# 柱子高度代表列值
df1.plot(kind='bar',figsize=(20,10))
- 指定x,y轴 绘图
# 指定x,y轴 绘图
df1.plot(kind='bar',x='x',y='y',figsize=(20,10))
- Series.plot()绘图,x轴是索引值,y轴是列值
# Series.plot()绘图,x轴是索引值,y轴是列值
df1['x'].plot(kind='bar')
案例展示:
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
tips = sns.load_dataset(name='tips',data_home='../data/seaborn_data')
# 统计不同天数 账单总金额, 平均消费金额, 最大用餐人数
temp = tips.groupby('day').agg({'total_bill':'sum','tip':'sum','size':'sum'})
temp
temp.plot(kind='bar',figsize=(20,10))
2.3 堆积柱状图
堆积柱状图, 设置 stacked=True
# 堆积柱状图, stacked=True
temp.plot(kind='bar',stacked=True,figsize=(20,10))
2.4 水平柱状图
kind=‘barh’
# 水平柱状图, kind='barh'
# 横向看是y轴, 纵向看是x轴
temp.plot(kind='barh',figsize=(20,10))
水平堆积柱状图
# 水平堆积柱状图, kind='barh',stacked=True
# 横向看是y轴, 纵向看是x轴
temp.plot(kind='barh',stacked=True,figsize=(20,10))
2.5 饼图
饼图 -> 反映不同类别占比情况, 不同类别分布情况
df.plot.pie(y=)
加载数据:
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
anscombe = sns.load_dataset('anscombe', data_home='../data/seaborn-data/')
df1 = anscombe[anscombe['dataset']=='I']
df1
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
tips = sns.load_dataset(name='tips',data_home='../data/seaborn_data')
# 统计不同天数 账单总金额, 平均消费金额, 最大用餐人数
temp = tips.groupby('day').agg({'total_bill':'sum','tip':'sum','size':'sum'})
temp
# 索引值代表不同类别
# y:根据指定的列值绘制饼图
# autopct:显示标签的样式
# radius:半径大小, 最大1
# title:标题
df1.plot(kind='pie',y='x',figsize=(20,10),autopct='%1.1f%%',radius=1,title='饼图x')
temp.plot(kind='pie',y='total_bill',figsize=(20,10),autopct='%1.1f%%',radius=1,title='饼图x')
2.6 散点图
散点图 -> 反映两个变量之间的相关性关系
df.plot.scatter(x=, y=, c=, s=)
加载数据:
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
anscombe = sns.load_dataset('anscombe', data_home='../data/seaborn-data/')
df1 = anscombe[anscombe['dataset']=='I']
df1
df1.plot.scatter(x='x',y='y')
2.7 气泡图
气泡图 -> 散点图设置s参数, 大小
c:区分颜色
s:区分大
# 气泡图设置s参数, 大小,c参数区分颜色,数字字段
df1.plot.scatter(x='x',y='y',c='y',s=df1['y']*30,figsize=(20,10))
2.8 面积图
面积图 -> 反映数据的分布情况
df.plot.area(stacked=)
加载数据:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 加载并读取anscombe数据集,返回df对象
# 通过data_home参数指定seaborn本地的数据集文件夹路径
anscombe = sns.load_dataset('anscombe', data_home='../data/seaborn-data/')
df1 = anscombe[anscombe['dataset']=='I']
df1
- 堆积面积图
# 堆积面积图
df1.plot.area(stacked=True,figsize=(20,10))
- 不堆积面积图
# 不堆积面积图
df1.plot.area(stacked=False,figsize=(20,10))
- s对象的面积图
# Series.plot.area() 面积图
df1['x'].plot.area(figsize=(20,10))
2.9 箱线图
箱线图 -> 查看数据列的极值情况, 最小值,1/4分位值,中位数,3/4分位值,最大值, 异常值
df.plot.box()
df1.plot.box()
- 异常值查看,最大值上面的点值
# 异常值查看,最大值上面的点值
tips.plot.box()
2.10 蜂巢图
蜂巢图 -> 反映不同变量的大小
# 蜂巢图,x参数代表x轴,y参数代表y轴,gridsize参数代表网格大小
df1.plot.hexbin(x='x',y='y',gridsize=10)
3. seaborn绘图
- Seaborn是基于matplotlib的图形可视化python包。Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。
- Matplotlib的API是按照图形的种类进行设计的,比如直方图、散点图等等; 而Seaborn不同,它的绘图API的设计初衷是为了更好的展示数据之间的关系,我们查看Seaborn的官方文档就能很直观的发现这一点。
- Seaborn的官方文档和版本号
- API文档 https://seaborn.pydata.org/api.html
- 历史版本API文档 https://seaborn.pydata.org/archive.html
- 本课程使用的Seaborn版本为 0.10.1
- seaborn图的分类
- 关系图:relplot关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
- 散点图 scatterplot() (kind=“scatter”)
- 线形图 lineplot() (kind=“line”)
- 分布图
- 单变量分布图
- 直方图,质量估计图 distplot()
- 核密度估计图 kdeplot()
- 双变量关系图
- 双变量关系图 jointplot()
- 变量关系组图 pairplot()
- 将数组中的数据点绘制为轴上的数据 rugplot()
- 单变量分布图
- 类别图:catplot 分类图表的接口,其实是下面八种图表的集成,通过指定kind参数可以画出下面的八种图
- 分类散点图
- stripplot() (kind=“strip”)
- swarmplot() (kind=“swarm”)
- 分类分布图
- boxplot() (kind=“box”)
- violinplot() (kind=“violin”)
- boxenplot() (kind=“boxen”)
- 分类估计图
- pointplot() (kind=“point”)
- barplot() (kind=“bar”)
- countplot() (kind=“count”)
- 分类散点图
- 回归图
- 回归模型图 Implot()
- 线性回归图 regplot()
- 线性回归残差图 residplot()
- 矩阵图组合图
- 热力图 heatmap()
- 聚集图 clustermap()
- 关系图:relplot关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
- 如果说Matplotlib的API规定了各种图形,那么Seaborn的API设计理念是为了更好的展示数据之间的关系;接下来我们就讲解较为常用的Seaborn绘图API
3.1 catterplot关系散点图
sns.scatterplot( data=tips_df, x=‘total_bill’, y=‘tip’, hue=‘sex’, style=‘smoker’, size=‘time’ )
关系散点图
x:指定列值为x轴值
y:指定列值为y轴值
hue:颜色
size:大小
styple:形状
# 关系散点图
# x:指定列值为x轴值
# y:指定列值为y轴值
# hue:颜色
# size:大小
# styple:形状
sns.scatterplot(data=tips,x='total_bill',y='tip')
plt.title('关系散点图')
sns.scatterplot(data=tips,x='total_bill',y='tip',hue='sex',size='size',style='size')
3.2 relplot关系散点线形图
散点图 ,默认是scatter
# 散点图 ,默认是scatter
sns.relplot(data=tips,x='total_bill',y='tip')
# 散点图
sns.relplot(data=tips,x='total_bill',y='tip',kind='line')
3.3 stripplot分类散点图
hue通用参数按颜色划分
jitter=True 当数据点重合较多时,尽量分散的展示数据点
dodge=True 拆分分类
# 分类散点图
f = plt.figure()
f.add_subplot(2,1,1)
# 按照x属性所对应的类别分别展示y属性的值,适用于分类数据
# 不同饭点的账单总金额的散点图
sns.stripplot(data=tips, x='time', y='total_bill')
f.add_subplot(2,1,2)
# hue通用参数按颜色划分
# jitter=True 当数据点重合较多时,尽量分散的展示数据点
# dodge=True 拆分分类
sns.stripplot(data=tips, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
3.4 violinplot分类小提琴图
在箱线图基础上额外描述了数值出现的频率
sns.violinplot(data=tips, x='time', y='total_bill')
- boxplot分类箱线图
# boxplot分类箱线图
sns.boxplot(data=tips, x='time', y='total_bill')
3.5 barplot分类平均值分布图
这里是引用
# 分类平均值分布图
# 下图中黑色的粗线条展示了数据的分布(误差线), 线条越短, 数据分布越均匀
# 下图中每个柱的顶点就是该分类y指定列的平均值
# estimator: 聚合函数, 默认平均值 np.mean
sns.barplot(data=tips, x='day', y='total_bill')
3.6 countplot分类计数图
# 分类计数图 等同于pandas中的直方图
# 按x指定的列值分组统计出现次数
sns.countplot(data=tips, x='day')
3.7 分类矩阵热力图
# 分类矩阵热力图
# 男女在午餐晚餐的平均消费
new_df = tips.pivot_table(index='sex', columns='time', values='total_bill', aggfunc='mean')
print(new_df)
# 输出为热力图:男性在晚餐花费最多
sns.heatmap(data=new_df)
3.8 成对关系图
#sns.pairplot(df) # 全部数值列进行两两组合
#sns.pairplot(df, vars=['列名1', '列名2']) # 指定要组合展示的列名
sns.pairplot(tips)
3.9 通用配置
将 Seaborn 提供的样式声明代码 sns.set() 放置在绘图前,就可以设置图像的样式
sns.set(
context='paper',
style='darkgrid',
palette='deep',
font='sans-serif',
font_scale=1
)
# context: 参数控制着默认的画幅大小,分别有 {paper, notebook, talk, poster} 四个值。其中,poster > talk > notebook > paper。
# style:参数控制默认样式,分别有 {darkgrid, whitegrid, dark, white, ticks},你可以自行更改查看它们之间的不同。
# palette:参数为预设的调色板。分别有 {deep, muted, bright, pastel, dark, colorblind} 等,你可以自行更改查看它们之间的不同。
# font:用于设置字体
# font_scale:设置字体大小
sns.scatterplot(data=tips_df, x='total_bill', y='tip', hue='sex', style='smoker', size='time')
plt.show()
4. Pyecharts图表绘制
- Echarts简介
- ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。
- ECharts 遵循 Apache-2.0 开源协议,免费商用,百度出品。
- ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)及兼容多种设备,可随时随地任性展示。
- Pyecharts简介
- pyecharts是一个用于生成Echarts图表的Python开源类库
- 使用echart的绘图效果比matplotlib等更加炫酷
- 无论是Echarts还是Pyecharts都有中文且丰富的文档和示例代码
4.1 安装pyecharts包
- pyecharts需要额外安装:执行
pip install pyecharts==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
进行安装
4.2 官方文档与示例
- 官方文档 https://pyecharts.org/#/zh-cn/intro
- 官方案例 https://gallery.pyecharts.org/#/README
案例演示:
# 三方模块, 需要安装
# !pip install pyecharts==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 获取各国GDP数据
data = pd.read_csv('../data/1960-2019全球GDP数据.csv', encoding='gbk')
data
# 获取2019年各国GDP数据
data_2019 = data.query('year==2019')
data_2019
temp_data = list(zip(data_2019['country'], data_2019['GDP']))
temp_data
import pyecharts.options as opts # 配置信息
from pyecharts.charts import WordCloud # 词云图类
c = (
WordCloud() # 通过词云图类创建对象 对象名=类名()
# series_name:标签名
# data_pair:数据
# word_size_range:根据数值匹配字体大小
.add(series_name="GDP值", data_pair=temp_data, word_size_range=[6, 66])
# 设置全局配置
.set_global_opts(
# 添加标题, 标题字体大小
title_opts=opts.TitleOpts(
title="2019年不同国家GDP产值", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
# 是否显示提示框
tooltip_opts=opts.TooltipOpts(is_show=False),
)
# 保存图形文件
.render("../output/basic_wordcloud.html")
)
c = (
WordCloud() # 通过词云图类创建对象 对象名=类名()
# series_name:标签名
# data_pair:数据
# word_size_range:根据数值匹配字体大小
.add(series_name="GDP值", data_pair=temp_data, word_size_range=[6, 66])
# 设置全局配置
.set_global_opts(
# 添加标题, 标题字体大小
title_opts=opts.TitleOpts(
title="2019年不同国家GDP产值", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
# 是否显示提示框
tooltip_opts=opts.TooltipOpts(is_show=False),
)
)
c.render_notebook()
5. 小结
-
Matplotlib:各种图形的API
- 折线图 df.plot.line()
- 柱状图 df.plot.bar()
- 水平条形图 df.plot.barh()
- 饼图 df.plot.pie()
- 散点图 df.plot.scatter()
- 气泡图 df.plot.scatter()
- 在散点图的基础上,除了xy参数以外再增加一个s参数,可以展示三维数据
- 面积图 df.plot.area()
- 箱线图 df.boxplot()
- 可以展示最大值、最小值、1/4分位数、中位数、3/4分位数
- 直方图 df.plot.hist()
- 描述一维数据,展示数据出现的次数
- 蜂巢图 df.plot.hexbin()
- 描述二维数据的同时,展示数据出现的次数
-
Seaborn:实现各种统计功能的图表API
- API文档 https://seaborn.pydata.org/api.html
- 历史版本API文档 https://seaborn.pydata.org/archive.html
- 关系图:relplot关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
- 散点图 scatterplot() (kind=“scatter”)
- 线形图 lineplot() (kind=“line”)
- 分布图
- 单变量分布图
- 直方图,质量估计图 distplot()
- 核密度估计图 kdeplot()
- 双变量关系图
- 双变量关系图 jointplot()
- 变量关系组图 pairplot()
- 将数组中的数据点绘制为轴上的数据 rugplot()
- 单变量分布图
- 类别图:catplot 分类图表的接口,其实是下面八种图表的集成,通过指定kind参数可以画出下面的八种图
- 分类散点图
- stripplot() (kind=“strip”)
- swarmplot() (kind=“swarm”)
- 分类分布图
- boxplot() (kind=“box”)
- violinplot() (kind=“violin”)
- boxenplot() (kind=“boxen”)
- 分类估计图
- pointplot() (kind=“point”)
- barplot() (kind=“bar”)
- countplot() (kind=“count”)
- 分类散点图
- 回归图
- 回归模型图 Implot()
- 线性回归图 regplot()
- 线性回归残差图 residplot()
- 矩阵图组合图
- 热力图 heatmap()
- 聚集图 clustermap()
-
Pyecharts
- 官方文档 https://pyecharts.org/#/zh-cn/intro
- 官方案例 https://gallery.pyecharts.org/#/README