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

Matplotlib数据分布型图表(2)

作者头像
python数据可视化之路
发布2023-02-23 20:53:21
7780
发布2023-02-23 20:53:21
举报

本文继续介绍数据分布型图表的绘制方法:

3 蜂巢图

蜂巢图使得每个类别数据点沿着X轴类别标签中心向两侧,同时向上均匀而对称地展开,整体较为美观,也能展现数据的分布规律。关于蜂巢图的绘制用到了seaborn库的swarmplot方法绘制。

现有一组数据(名称为df),记录了PM2.5不同季节的浓度,每个季节有100个,现用蜂巢图表示。

代码如下:

代码语言:javascript
复制
import seaborn as sns
import matplotlib.pyplot as plt

font1 = {'family': 'Times New Roman', 'size': 14}
fig = plt.figure(figsize = (12, 6))
ax = fig.add_subplot(121)
#绘制蜂巢图,并绘制在ax画布上 
g = sns.swarmplot(x = 'season', y = 'pm2_5', hue = 'season', data = df, edgecolor = 'k', linewidth = 0.2, ax = ax)
#设置x轴标签
ax.set_xlabel('season', font1)
#设置图例不可见
ax.legend().set_visible(False)
plt.show()

注:画布的控制语句与ax一样,图例的调整,坐标轴的设置遵循axes对象的规定。

通过蜂巢图可以看出,春季的PM2.5呈现双峰趋势,冬季的PM2.5呈现单峰趋势,并且数值比春季高。

为了更好展现春季和冬季的浓度分布趋势,我们在以上图的基础上为春季和冬季添加一个PM2.5的密度分布图(密度分布图见上节)。

代码语言:javascript
复制
#设置一个字体样式
font1 = {'family': 'Times New Roman', 'size': 14}
fig = plt.figure(figsize = (12, 6))
ax1 = fig.add_subplot(121)
sns.swarmplot(x = 'season', y = 'pm2_5', hue = 'season', data = df, edgecolor = 'k', linewidth = 0.2, ax = ax1)
ax1.set_xlabel('season', font1)
ax1.legend().set_visible(False)

ax2 = fig.add_subplot(222)
#密度图语法,见上节 
sns.distplot(df.loc[:100, 'pm2_5'], bins = 25, hist_kws = {'edgecolor': 'k', 'color': 'b'}, kde_kws = {'color':'k', 'linestyle': '-'}, ax = ax2)
ax2.set_title('Spring distrubtion')

ax3 = fig.add_subplot(224)
sns.distplot(df.loc[300:401, 'pm2_5'], bins = 25, hist_kws = {'edgecolor': 'k', 'color': 'b'}, kde_kws = {'color':'k', 'linestyle': '-'}, ax = ax3)
ax3.set_title('Winter distrubtion')

#调整子图垂直间距,水平间距用wspace,自行调整
plt.subplots_adjust(hspace=0.5)
plt.show()

从图上也可以看出,在春季PM2.5的浓度分布呈现双峰趋势,明显的峰值在60-80之间;冬季呈现单峰趋势。因此蜂巢图可以方便地显示数据的分布情况。

4 箱型图

箱型图又被称为箱须图、箱线图、盒图,能显示一组数据的最大值、最小值、中位数以及上下四分位数,可以反映数据分布的中心位置和散布范围。

图片来自谷歌搜索结果

四分位数是指在统计学中将数据从小到大分为4等份,处于各等分位置的变量值,每部分包括25%的数据。

第一个四分位数(Q1)就是下四分位数,第二个四分位数(Q2)就是中位数,第三个四分位数(Q3)就是上四分位数。

其中,Q1为“较小四分位数”,等于该样本从小到大排列后第25%的数据;反之,Q3为“较大四分位数”,等于样本从小到大排列后第75%的数据。

代码语言:javascript
复制
#去除大于400的值 
df.drop(df[df['pm2_5'] > 400].index, inplace = True)  
#获取季节列表的唯一值  
season = df['season'].unique()
#将数据组成列表形式
all_data = [df.loc[df['season'] == son_season, 'pm2_5'].values for son_season in season]
#默认绘制 
ax[0].boxplot(all_data, labels = season)
#patch_artist表示是否设置箱体杨色,boxprops表示箱体和边的颜色
#sym表示异常点标记,notch表示是否凹陷显示中位数
ax[1].boxplot(all_data, labels = season, patch_artist = True, boxprops = {'color':'orangered','facecolor':'pink'}, 
              sym = '+', notch = True)

plt.show()

其中,箱体高度表示数据的集中程度。箱体越低,表示数据越集中。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档