大家好,我是 【Python当打之年】
本期我们参考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
以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、收藏也可以分享让更多人知道
更多内容(公众号:Python当打之年)
推荐阅读
Pandas+Pyecharts | 2022年世界500强数据分析可视化
Pandas+Pyecharts | 快手APP大学生用户数据分析可视化
Pandas+Pyecharts | 上海市餐饮数据分析可视化
Pandas+Pyecharts | 40000+汽车之家数据分析可视化
Pandas+Pyecharts | 山东省高考考生数据分析可视化
Pandas+Pyecharts | 20000+天猫订单数据可视化
Pandas+Pyecharts | 广州市已成交房源信息数据可视化
40000+条考研信息数据可视化(学校、专业分数分布)
Pandas+Pyecharts | 某直聘平台招聘信息数据可视化
Pandas+Pyecharts | 医院药品销售数据可视化
墙裂推荐!几个Jupyter Notebook 超实用插件(一)
可视化 | Python分析中秋月饼,这几种口味才是yyds!
可视化 | Pyecharts动态绘制比特币近几年股价变迁
爬取《白蛇2:青蛇劫起》20000+影评数据分析可视化
123个Pandas常用基础指令,真香!
爬虫+可视化 | 动态展示2020东京奥运会奖牌世界分布
Schedule + Pyecharts | 时间序列图(动态轮播图)
Pandas+Pyecharts | 北京某平台二手房数据分析+可视化
Pandas+Pyecharts | 2021中国大学综合排名分析+可视化
可视化 | 用Python分析近5000个旅游景点,告诉你假期应该去哪玩
可视化 | Python陪你过520:在你身边,你在身边
可视化 | Python制作最炫3D可视化地图
爬虫 | Python爬取豆瓣电影Top250 + 数据可视化
爬虫 | 用python构建自己的IP代理池,再也不担心IP不够用啦!
技巧 | python定时发送邮件(自动添加附件)
技巧 | 20个Pycharm最实用最高效的快捷键(动态展示)
技巧 | Python制作朋友圈炫酷九宫格图片
基础 | 彻底搞懂Python异常处理:try-except-else-finally
基础 | Python函数一文详解