如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例

如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例

1.问题的提出

之前暑期在家,闲着没事干的时候想写点基础的代码巩固下自己python知识,于是就上Kaggle下了一套东京奥运会的数据集,原数据集地址在这里:https://www.kaggle.com/arjunprasadsarkhel/2021-olympics-in-tokyo。我在对第一个数据表Athletes做可视化分析时,使用seaborn绘制了参与人数前10项目的条形图。绘制完之后,我突然想在柱子顶端添加各项目对应的实际人数,本来以为这只需要在seaborn的barplot中添加相应的参数即可,没想到探究到后面发现还有点复杂。对于本案例所涉及数据的实现,主要参考https://blog.csdn.net/sinat_29957455/article/details/82961478这篇文章做了一些调整。大家有更好的实现方法与思路也请告诉我,谢谢~

2.数据基本处理与绘图

2.1数据基本情况

首先我们来看看Athletes表的基本情况。

import pandas as pd
Ath = pd.read_excel("Athletes.xlsx",engine = 'openpyxl')

Ath.head(10)

NameNOCDiscipline0AALERUD KatrineNorwayCycling Road1ABAD NestorSpainArtistic Gymnastics2ABAGNALE GiovanniItalyRowing3ABALDE AlbertoSpainBasketball4ABALDE TamaraSpainBasketball5ABALO LucFranceHandball6ABAROA CesarChileRowing7ABASS AbobakrSudanSwimming8ABBASALI HamidehIslamic Republic of IranKarate9ABBASOV IslamAzerbaijanWrestling

表格中只有三个变量,姓名,国籍,以及所参加的项目。由于没有涉及到定量数据,因此我们先进行分组计数操作,并重新形成列联表。这个操作可以通过自我迭代实现。

2.2生成列联表

Athlist2 = [coun for coun in Ath['Discipline'].value_counts().items()]
Ath_df2 = pd.DataFrame(Athlist2,columns = ['Items','nums'])
Ath_df2.head(10)

Itemsnums0Athletics20681Swimming7432Football5673Rowing4964Hockey4065Judo3736Handball3437Shooting3428Sailing3369Rugby Sevens283

田径(Athletics)的参赛人数遥遥领先,游泳与足球紧随其后,参赛人数也突破了500.其余项目的参赛人数都低于500.考虑到实际项目数目较多,全部画出来并不美观,因此只选取这参赛人数前10位的项目绘制条形图。

2.3seaborn绘制条形图

seaborn画图特别方便,只需要几行代码就能画了,调色与网格设计也比较美观,因此我个人还挺喜欢seaborn。

import seaborn as sns
import matplotlib.pyplot as plt
f,ax = plt.subplots(figsize=(15, 6))
sns.set_theme(style = 'whitegrid')
sns.set_color_codes("muted")

g = sns.barplot(x = 'Items',y = 'nums',data = Ath_df2[:10],orient = 'v')

如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例

这张图虽然能直观体现出各项目参赛人数的对比,但如果我们想了解具体某个项目的参赛人数信息,这张图并不能直接告诉我们,尤其是后面9条柱子高度相差不大的情形下。因此产生在柱形图顶端添加数字的想法是很自然的。

3.问题的解决

按照上述参考链接中的说法,重点是要采用循环遍历的方法定位数字,然后将数字添加上去即可。这里需要注意的是,我们全程采用的是dataframe数据格式,与某些教程中,采用matplotlib绘图时以zip函数实现遍历不同,我们要采用iterrows()方法来实现这一步。添加数字使用text函数即可。具体的原理大家可以再自行查阅


import seaborn as sns
import matplotlib.pyplot as plt
f,ax = plt.subplots(figsize=(15, 6))
sns.set_theme(style = 'whitegrid')
sns.set_color_codes("muted")

g = sns.barplot(x = 'Items',y = 'nums',data = Ath_df2[:10],orient = 'v')

for index,row in Ath_df2[:10].iterrows():

    g.text(row.name,row.nums,row.nums,ha="center")

如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例

如此一来,我们就实现了向seaborn的条形图顶端插入数字的方法。

Original: https://blog.csdn.net/qq_38351271/article/details/120242445
Author: goyagrace
Title: 如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754635/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球