本篇介绍增强箱型图、小提琴图和二维统计直方图绘制方法。其中增强箱型图和小提琴图用到了seaborn库,二维统计直方图用到了matplotlib库。
5 增强箱型图
增强箱型图是从箱型图基础上发展而来。一般箱型图中包含了下四分位数、中位数、上四分位数、上下界和异常值组成。对于大数据而言,内部可能存在多种的数据分布情况,因此增强箱型图是用于大数据量下的绘制方法,它包括了更多的分位数显示数据的分布。
它使用了seaborn库的boxenplot方法。
基础语法:
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万余条,现用箱型图和增强箱型图表示。
代码如下:
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浓度,现用小提琴图表示。
代码如下:
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方法绘制。
基本语法(根据笔者的实际经验列举):
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万条数据),用二维统计直方图表示,代码如下:
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()
本篇到此结束,限于笔者水平有限,错误不可避免。欢迎交流!
本文分享自 python数据可视化之美 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有