前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Matplotlib数据分布型图表(3

Matplotlib数据分布型图表(3

作者头像
python数据可视化之路
发布于 2023-02-23 12:54:37
发布于 2023-02-23 12:54:37
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

本篇介绍增强箱型图、小提琴图和二维统计直方图绘制方法。其中增强箱型图和小提琴图用到了seaborn库,二维统计直方图用到了matplotlib库。

5 增强箱型图

增强箱型图是从箱型图基础上发展而来。一般箱型图中包含了下四分位数、中位数、上四分位数、上下界和异常值组成。对于大数据而言,内部可能存在多种的数据分布情况,因此增强箱型图是用于大数据量下的绘制方法,它包括了更多的分位数显示数据的分布。

它使用了seaborn库的boxenplot方法。

基础语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
seaborn.boxenplot(x,y,hue,data,order,hue_order,orient,ax,**kwargs)

x:x轴的数值列名(本实例中为season)

y:y轴的数值列名(本实例中为pm2_5)

hue:分类显示的列名

data:采用的数据名称(本实例为df)

order:x轴数值的顺序排列(列表)

hue_order:分类显示的顺序排列

orient:排列方向,默认水平,如果垂直,参数值为'h'

ax:图形绘制到哪个子区内

具体语法参考:

https://seaborn.pydata.org/generated/seaborn.boxenplot.html?highlight=boxenplot#seaborn.boxenplot

实例:现有一组数据(df),记录了2015年站点不同季节的PM2.5数值,共计98万余条,现用箱型图和增强箱型图表示。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

#创建画布新建字体样式
fig = plt.figure(figsize = (15, 5))
font1 = {'family': 'Times New Roman', 'size': 14}

#增强箱型图
ax1 = fig.add_subplot(131)
sns.boxenplot(x = 'season', y = 'pm2_5', data = df, ax = ax1)
ax1.set_title('Boxenplot Mapping', font1)

#普通箱型图,设置异常值大小为1(fliersize参数) 
ax2 = fig.add_subplot(132)
sns.boxplot(x = 'season', y = 'pm2_5', data = df, ax = ax2, fliersize = 1) #最后一个参数为异常点大小
ax2.set_yticks([]) #取消y轴刻度
ax2.set_ylabel('') #取消y轴标签
ax2.set_title('Boxplot 1.5*IQR', font1)

#普通箱型图,设置异常值范围为2*IQR(默认为1.75*IQR,whis参数),并添加凹陷
ax3 = fig.add_subplot(133)
sns.boxplot(x = 'season', y = 'pm2_5', data = df, notch = True, ax = ax3, fliersize = 1, whis = 2)
ax3.set_yticks([])
ax3.set_ylabel('')
ax3.set_title('Boxplot 2*IQR', font1)

plt.subplots_adjust(wspace = 0.03)
plt.show()

从图中可以看出,与普通箱型图相比,增强箱型图可以展现大数据量更多的细节。它不仅表示了数据的范围、异常值,还表示了在不同数值段的数据分布情况。

6 小提琴图

小提琴图用于显示数据分布及其概率密度。这种图表结合了箱型图和密度图的特征,主要用来显示数据的分布形状。

图片来自知乎

上图展示了箱型图与小提琴图的关系,小提琴图也展示了最小值、最大值、中位数、四分位数和离群值,并在此基础上添加了密度曲线。

小提琴图利用了seaborn库的violinplot方法。

基础语法:

seaborn.violinplot(x,y,data,hue,order,hue_order,orient,scale,inner,ax,**kwargs)

参数解释同增强箱型图一致,其他的参数解释:

scale:用于调整宽度的参数,默认为area,还可以为count(根据数量调整宽度),width

inner:小提琴图内部形态,默认为box(箱型图),还可以为quartile(绘制分位数)、stick(绘制竖线)、point(绘制点)

现有一组数据(df),记录了2015年4季的pm2.5浓度,现用小提琴图表示。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fig = plt.figure(figsize = (15, 5))
#默认绘图
ax1 = fig.add_subplot(131)
sns.violinplot(x = 'season', y = 'pm2_5', data = df, ax = ax1)
#设置宽度为count,透明度为30%(saturation参数) 
ax2 = fig.add_subplot(132)
sns.violinplot(x = 'season', y = 'pm2_5', data = df, ax = ax2, scale = 'count', saturation = .3) 
#设置内部形态采用分位数表示
ax3 = fig.add_subplot(133)
sns.violinplot(x = 'season', y = 'pm2_5', data = df, ax = ax3, inner = 'quartile') 

plt.show()

7 二维统计直方图

二维统计直方图主要针对二维数据的统计分析,X-Y轴数据为数值型。首先要确定一个区间,使其包含所有数据。将区间分为若干子区间,并计算每个子区间的频数,并用颜色填充。我们也称这样的统计图为二维二位频数分布直方图。

本实例中利用了matplotlib库的hist2d和hexbin方法绘制。

基本语法(根据笔者的实际经验列举):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.hist2d(x,y,bins,cmap,norm,**kwargs)

plt.hexbin(x,y,bins,cmap,**kwargs)

x:x轴坐标数值(数组或列表)

y:y轴坐标数值(数组或列表)

bins:在hist2d中,为区间数;在hexbin中为区间的划分方法,一般取'log'

norm:颜色正则化方法

具体可参考:

https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.hist2d.html?highlight=hist2d#matplotlib.axes.Axes.hist2d

现有一组数据(df),记录了2015年pm2.5浓度(共98万条数据),用二维统计直方图表示,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from matplotlib import colors 
import matplotlib.pyplot as plt

font1 = {'family':'Times New Roman', 'size': 14}
fig = plt.figure(figsize = (10, 5))

x = df['pm2_5'].values.tolist()
y = df['pred_pm2_5'].values.tolist()

#设置cmap为jet(颜色映射),正则化方法为Log正则化
ax1 = fig.add_subplot(121)
ax1.hist2d(x, y, bins = 100, cmap = 'jet', norm = colors.LogNorm())

ax2 = fig.add_subplot(122)
cf = ax2.hexbin(x, y, bins = 'log', cmap = 'jet')
ax2.set_yticks([]) #取消ax2的y轴刻度 

#设置颜色条带 
cbar = plt.colorbar(cf, ax = ax2)
cbar.set_label('Count(N)', fontdict = font1, rotation = -90, labelpad = 15)

plt.subplots_adjust(wspace = 0.03)
plt.show()

本篇到此结束,限于笔者水平有限,错误不可避免。欢迎交流!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验