Matplotlib | 世界足球俱乐部排名可视化

简介: Matplotlib | 世界足球俱乐部排名可视化

大家好,我是欧K~

本期我们参考FiveThirtyEight发布的世界足球俱乐部排名,利用Matplotlib手把手教大家如何制作新闻级别可视化作品,希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以联系小编。

先看看效果:

1. 导入模块

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.image as mpimg
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

主要用到:matplotlib — patches、image、offsetbox

2. 示例数据

dic_t = {'Premier League':'England','Bundesliga':'Germany','Ligue 1':'France', 'La Liga':'Spain',
         'Eredivisie':'Netherlands','Serie A':'Italy', 'Primeira Liga':'Portugal','Bundesliga_1':'Austria'}
team = ['Man.City', 'Liverpool', 'Bayern Munich', 'Chelsea', 'PSG',
        'Real Madrid', 'Ajax', 'Barcelona', 'Tottnham', 'Inter Milan',
        'RB Leipzig', 'Porto', 'RB Salzburg', 'Dortmund', 'Atlético Madrid',
        'Arsenal', 'Villarreal', 'Brighton', 'AC Milan', 'Sporting'][::-1]
league = ['Premier League', 'Premier League', 'Bundesliga', 'Premier League', 'Ligue 1',
          'La Liga', 'Eredivisie', 'La Liga', 'Premier League', 'Serie A',
          'Bundesliga', 'Primeira Liga', 'Bundesliga_1', 'Bundesliga', 'La Liga',
          'Premier League', 'La Liga', 'Premier League', 'Serie A', 'Primeira Liga'][::-1]
league_country = [dic_t[i] for i in league]
rank = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][::-1]
OFF = [3.3,2.9,3.4,2.4,2.8,2.7,3.0,2.4,2.5,2.5, 2.5,2.3,2.5,2.6,2.0,2.2,2.3,2.1,2.1,2.2][::-1]
DEF = [0.3,0.2,0.6,0.3,0.7,0.6,0.9,0.5,0.6,0.7, 0.3,0.2,0.6,0.3,0.7,0.6,0.9,0.5,0.6,0.7][::-1]
SPI = [93.5,93.3,91.6,88.4,85.0,85.5,84.6,84.3,84.1,82.1, 81.8,81.6,81.5,81.1,80.4,80.2,80.1,80.0,80.0,79.8][::-1]

截取世界排名前20的足球乐部。

3. 画布设置

fig, ax = plt.subplots(1, 1, dpi=300)
# 隐藏xy轴
ax.get_yaxis().set_visible(False)
ax.get_xaxis().set_visible(False)
# 将刻度小横线设置为白色,标签颜色为黑色
plt.tick_params(axis='x', color='w')
# x,y轴刻度范围
ax.set_xlim(0, 2)
ax.set_ylim(0, 4)


4. 画布区域主题分配

# 设置上下左右外框变为透明
for i in ['top', 'right', 'left', 'bottom']:
    ax.spines[i].set_visible(False)
title_size = 3.2
title_pos = 40
ax.axhline(y=title_pos, xmax=.8, c='black', lw=0.4)
ax.axvline(x=.7, ymin=0.002, ymax=.909, c='black', lw=0.4)
ax.axvline(x=3.95, ymin=0.002, ymax=.909, c='black', lw=0.4)
ax.axhline(y=0.1, xmax=.8, c='black', lw=0.4)



5. 添加数据散点

x1 = [4.1] * len(rank)
y1 = [1 + i * 2 for i in range(len(rank))]
ax.scatter(x1, y1, s=40,alpha=0.8)


6. 添加表头

ax.text(0.08, 0.2 + title_pos, 'RANK', fontdict={'color': '#1C1C1C', 'size': title_size}, fontweight='bold')
ax.text(0.39, 0.2 + title_pos, '1-WEEK\nCHANGE', fontdict={'color': '#1C1C1C', 'size': title_size}, fontweight='heavy')
ax.text(0.75, 0.2 + title_pos, 'TEAM', fontdict={'color': '#1C1C1C', 'size': title_size}, fontweight='heavy')



7. 添加数据

for i in range(len(rank)):
    ax.axhline(y=0.1 + i * 2, xmax=.8, c='gray', lw=0.4, alpha=0.2)
    ax.text(0.13, 0.78 + i * 2, str(rank[i]), fontdict={'color': '#1C1C1C', 'size': 4}, fontweight='normal')
    ax.text(.75, 0.78 + i * 2, str(team[i]), fontdict={'color': '#1C1C1C', 'size': 4}, fontweight='heavy')
    ax.text(4.05, 0.75 + i * 2, str(OFF[i]), fontdict={'color': '#1C1C1C', 'size': 3.6}, fontweight='normal')



8. 设置colarbar

x1 = [4.1] * len(rank)
y1 = [1 + i * 2 for i in range(len(rank))]
ax.scatter(x1, y1, c=OFF, s=40, cmap='Greens', vmin=1, vmax=4, alpha=0.8, edgecolors='none')


9. 添加俱乐部flag


10. 添加其他数据


11. 添加标题、注释


12. 在线运行地址

篇幅原因,部分代码未展示,在线运行地址(含全部代码)

https://www.heywhale.com/mw/project/6358ffe4d9319f9326104897

END


以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享让更多人知道

相关文章
|
11天前
|
数据可视化 数据挖掘 大数据
【数据分析与可视化】Matplotlib绘图基础语法讲解(图文解释 超详细)
【数据分析与可视化】Matplotlib绘图基础语法讲解(图文解释 超详细)
66 0
|
6月前
|
数据可视化 程序员 Python
python生成可视化数据(matplotlib)进阶版
上期我们讲到如何用matplotlib模块将表格里的数据转换成可视化的折线图,但是,这里会有一个问题,表格里的数据是死的,是我随手创建的。在这一期,我将讲解如何通过requests+matplotlib等编写一个真实数据的可视化内容。
|
11天前
|
数据可视化 数据挖掘 Python
【数据分析与可视化】Matplotlib中动态rc参数设置详解与实战(图文解释 附源码)
【数据分析与可视化】Matplotlib中动态rc参数设置详解与实战(图文解释 附源码)
113 0
|
7月前
|
数据可视化 Python
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
129 0
|
11天前
|
资源调度 自然语言处理 数据可视化
【数据分析与可视化】Matplotlib中十大绘图模型的讲解及实现(图文解释 附源码)
【数据分析与可视化】Matplotlib中十大绘图模型的讲解及实现(图文解释 附源码)
76 1
|
7月前
|
数据可视化 定位技术 Python
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
846 0
|
5天前
|
存储 数据可视化 算法
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
|
6天前
|
数据可视化 数据挖掘 Python
【Python DataFrame专栏】DataFrame的可视化探索:使用matplotlib和seaborn
【5月更文挑战第20天】本文介绍了使用Python的pandas、matplotlib和seaborn库进行数据可视化的步骤,包括创建示例数据集、绘制折线图、柱状图、散点图、热力图、箱线图、小提琴图和饼图。这些图表有助于直观理解数据分布、关系和趋势,适用于数据分析中的探索性研究。
【Python DataFrame专栏】DataFrame的可视化探索:使用matplotlib和seaborn
|
11天前
|
数据可视化 数据挖掘 Python
Matplotlib与Seaborn在Python面试中的可视化题目
【4月更文挑战第16天】本文介绍了Python数据可视化在面试中的重点,聚焦于Matplotlib和Seaborn库。通过基础绘图、进阶图表、图形定制和交互式图表的实例展示了常见面试问题,并列出了一些易错点,如忽视图形清晰度、误用色彩等。建议理解两者功能并注意保持图形简洁,以提升面试表现和数据可视化能力。
24 3
|
11天前
|
存储 数据可视化 数据挖掘
利用Matplotlib实现地图可视化
【4月更文挑战第17天】使用Matplotlib结合GeoPandas和Basemap在Python中实现地图可视化。首先安装Matplotlib、GeoPandas和Basemap库。读取GeoJSON或Shapefile格式的地理数据,然后使用Basemap创建地图底图,绘制海岸线、国家边界和大陆湖泊。将GeoDataFrame数据转换后叠加到地图上,自定义地图样式和添加图例。利用颜色映射展示与地理位置相关的数值数据,创建颜色条。此外,可通过Folium实现交互式地图。通过学习和实践,提升地图可视化的技能。