news 2026/6/22 18:18:00

利用镜像条形图探索Erasmus项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
利用镜像条形图探索Erasmus项目

利用镜像条形图探索Erasmus项目

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt

数据探索

以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【数据可视化】自动获取~

resume_url='https://raw.githubusercontent.com/holtzy/the-python-graph-gallery/master/static/data/resume.csv'erasmus_url='https://raw.githubusercontent.com/holtzy/the-python-graph-gallery/master/static/data/erasmus.csv'resume=pd.read_csv(resume_url)data=pd.read_csv(erasmus_url)print(resume.head())print(data.head())

1、resume数据:

country_name:国家地区名称

mean_rec:平均入境学生数

mean_send:平均出国学生数

2、data数据:

academic_year:年份

participants_x:出国学生的x位置

participants_y:入境学生的x位置

y_position:学生的y位置

绘制有序条形图

# 初始化布局fig,ax=plt.subplots(figsize=(6,6))# 创建两个条形图:数据已经按照mean_send升序了ax.barh(resume['country_name'],resume['mean_rec'],color='blue',alpha=0.3)ax.barh(resume['country_name'],-resume['mean_send'],color='darkorange',alpha=0.3)# 标题ax.set_title('Number of Student',weight='bold')plt.show()

移除边框并修改国家标签位置

fig,ax=plt.subplots(figsize=(6,6))# 创建两个条形图:数据已经按照mean_send升序了ax.barh(resume['country_name'],resume['mean_rec'],color='blue',alpha=0.3)ax.barh(resume['country_name'],-resume['mean_send'],color='darkorange',alpha=0.3)# 移除轴刻度ax.set_xticks([])ax.set_yticks([])# 移除边框ax.spines[['right','top','left','bottom']].set_visible(False)# 国家标签居中fori,country_nameinenumerate(resume['country_name']):ax.text(0,i,country_name,ha='center',va='center',fontsize=8,alpha=0.6)# 标题ax.set_title('Number of Student',weight='bold',fontsize=9)plt.show()

添加观测数据

fig,ax=plt.subplots(figsize=(6,6))# 创建两个条形图:数据已经按照mean_send升序了ax.barh(resume['country_name'],resume['mean_rec'],color='blue',alpha=0.3)ax.barh(resume['country_name'],-resume['mean_send'],color='darkorange',alpha=0.3)# 移除轴刻度ax.set_xticks([])ax.set_yticks([])# 移除边框ax.spines[['right','top','left','bottom']].set_visible(False)# 国家标签居中fori,country_nameinenumerate(resume['country_name']):ax.text(0,i,country_name,ha='center',va='center',fontsize=8,alpha=0.6)# 为每个国家地区添加不同年份的观测数据y_position=0fori,rowindata.iterrows():# 获取观测值数据sending=-row['participants_x']receiving=row['participants_y']y_position=row['y_position']years=row['academic_year']# 根据相关年份更改 alpha 参数决定透明度year_alpha_mapping={'2014-2015':0.3,'2015-2016':0.4,'2016-2017':0.5,'2017-2018':0.6,'2018-2019':0.7,'2019-2020':0.9}alpha=year_alpha_mapping[years]*0.6# y轴位置添加小噪声y_position+=np.random.normal(0,0.1,1)# 添加散点ax.scatter(sending,y_position,c='darkorange',alpha=alpha,s=3)ax.scatter(receiving,y_position,c='darkblue',alpha=alpha,s=3)# 标题ax.set_title('Number of Student',weight='bold',fontsize=9)plt.show()

额外的注释丰富图表信息

# 初始化fig,ax=plt.subplots(figsize=(8,6))# 创建两个条形图:数据已经按照mean_send升序了ax.barh(resume['country_name'],resume['mean_rec'],color='blue',alpha=0.2)ax.barh(resume['country_name'],-resume['mean_send'],color='darkorange',alpha=0.2)# 移除轴刻度ax.set_xticks([])ax.set_yticks([])# 移除边框ax.spines[['right','top','left','bottom']].set_visible(False)# 国家标签居中fori,country_nameinenumerate(resume['country_name']):ax.text(0,i,country_name,ha='center',va='center',fontsize=8,alpha=0.6)# 为每个国家地区添加不同年份的观测数据y_position=0fori,rowindata.iterrows():# 获取观测值数据sending=-row['participants_x']receiving=row['participants_y']y_position=row['y_position']years=row['academic_year']# 根据相关年份更改 alpha 参数决定透明度year_alpha_mapping={'2014-2015':0.3,'2015-2016':0.4,'2016-2017':0.5,'2017-2018':0.6,'2018-2019':0.7,'2019-2020':0.9}alpha=year_alpha_mapping[years]*0.6# y轴位置添加小噪声y_position+=np.random.normal(0,0.2,1)# 添加散点ax.scatter(sending,y_position,c='darkorange',alpha=alpha,s=3)ax.scatter(receiving,y_position,c='darkblue',alpha=alpha,s=3)# 离校和入学学生标签ax.text(-6000,24,'Outgoing\nstudents',color='darkorange',ha='center',va='center',weight='bold')ax.text(6000,24,'Incoming\nstudents',color='darkblue',ha='center',va='center',weight='bold')# 描述信息的标题ax.text(-7000,9,'Students\nexchanges\nin Europe',ha='left',va='center',weight='bold',fontsize=14)# 描述信息text='''Country ranking based on a sample Erasmus programs. Bars show the annual average for the period, points show the values for each year.'''ax.text(-7000,4.5,text,ha='left',va='center',fontsize=7)# 著作信息text='''Data: Data.Europa | Plot: @BjnNowak'''ax.text(-7000,1,text,ha='left',va='center',fontsize=6)# 年份图例ax.text(x=4200,y=11,s='Academic Year',fontsize=7,weight='bold')y_position=10# 开始的位置foryear,alphainyear_alpha_mapping.items():# 添加点ax.scatter(4000,y_position,alpha=alpha,s=5,c='black')ax.text(x=4200,y=y_position-0.2,s=year,fontsize=7)y_position-=1# 迭代减少# 标题ax.set_title('Number of Student',weight='bold',fontsize=9)plt.show()

参考:Mirror barplot with data points

共勉~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/21 23:03:02

终极免费WordPress页面构建利器:PRO Elements完全使用指南

终极免费WordPress页面构建利器:PRO Elements完全使用指南 【免费下载链接】proelements This plugin enables GPL features of Elementor Pro: widgets, theme builder, dynamic colors and content, forms & popup builder, and more. 项目地址: https://gi…

作者头像 李华
网站建设 2026/6/22 17:47:34

FanControl终极指南:快速解决Windows风扇控制难题

你是否曾为电脑风扇的噪音而烦恼?玩游戏时突然的"高速运转",或者待机时风扇不规则地忽快忽慢?FanControl正是为解决这些散热控制问题而生的专业工具。在本文中,你将立即掌握这款软件的完整使用流程,从基础安…

作者头像 李华
网站建设 2026/6/23 14:01:33

M.I.B.汽车系统定制指南:新手也能轻松解锁隐藏功能

你是否曾经对汽车原厂系统的功能限制感到困扰?为什么高端汽车的信息娱乐系统不能像智能手机一样自由定制和扩展?如果你的车载系统是Harman MHIG或MHI2/MHI2Q系列,那么M.I.B.正是你一直在寻找的解决方案。 【免费下载链接】M.I.B._More-Incred…

作者头像 李华
网站建设 2026/6/18 19:18:11

React 360终极指南:从零构建企业级VR应用的完整方案

React 360终极指南:从零构建企业级VR应用的完整方案 【免费下载链接】react-360 项目地址: https://gitcode.com/gh_mirrors/reac/react-360 传统网页体验正在面临前所未有的挑战:用户渴望沉浸式互动,企业需要创新营销手段&#xff0…

作者头像 李华
网站建设 2026/6/22 17:14:35

(7-2)MCP与AI Agent:MCP赋能AI Agent的方式

7.2 MCP赋能AI Agent的方式MCP作为一种开放协议,主要通过标准化接口、提供上下文管理以及安全可控的运行机制来赋能AI Agent。它定义统一规范,让各类外部工具、数据源能以插件形式便捷接入AI Agent工作流,AI Agent借此可动态发现并调用多样化…

作者头像 李华