大家好,我是 【Python當(dāng)打之年】
本期我們參考FiveThirtyEight發(fā)布的世界足球俱樂部排名,利用Matplotlib手把手教大家如何制作新聞級別可視化作品,希望對小伙伴們有所幫助,如有疑問或者需要改進(jìn)的地方可以聯(lián)系小編。
先看看效果:
1. 導(dǎo)入模塊
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. 示例數(shù)據(jù)
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. 畫布設(shè)置
fig, ax = plt.subplots(1, 1, dpi=300)
# 隱藏xy軸
ax.get_yaxis().set_visible(False)
ax.get_xaxis().set_visible(False)
# 將刻度小橫線設(shè)置為白色,標(biāo)簽顏色為黑色
plt.tick_params(axis=x, color=w)
# x,y軸刻度范圍
ax.set_xlim(0, 2)
ax.set_ylim(0, 4)
4. 畫布區(qū)域主題分配
# 設(shè)置上下左右外框變?yōu)橥该? 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. 添加數(shù)據(jù)散點(diǎn)
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. 添加數(shù)據(jù)
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. 設(shè)置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. 添加其他數(shù)據(jù)
11. 添加標(biāo)題、注釋
12. 在線運(yùn)行地址
篇幅原因,部分代碼未展示,在線運(yùn)行地址(含全部源碼):https://www.heywhale.com/mw/project/6358ffe4d9319f9326104897
以上就是本期為大家整理的全部內(nèi)容了,趕快練習(xí)起來吧,喜歡的朋友可以點(diǎn)贊、收藏也可以分享讓更多人知道
更多內(nèi)容(公眾號:Python當(dāng)打之年)
推薦閱讀
Pandas+Pyecharts | 2022年世界500強(qiáng)數(shù)據(jù)分析可視化
Pandas+Pyecharts | 快手APP大學(xué)生用戶數(shù)據(jù)分析可視化
Pandas+Pyecharts | 上海市餐飲數(shù)據(jù)分析可視化
Pandas+Pyecharts | 40000+汽車之家數(shù)據(jù)分析可視化
Pandas+Pyecharts | 山東省高考考生數(shù)據(jù)分析可視化
Pandas+Pyecharts | 20000+天貓訂單數(shù)據(jù)可視化
Pandas+Pyecharts | 廣州市已成交房源信息數(shù)據(jù)可視化
40000+條考研信息數(shù)據(jù)可視化(學(xué)校、專業(yè)分?jǐn)?shù)分布)
Pandas+Pyecharts | 某直聘平臺招聘信息數(shù)據(jù)可視化
Pandas+Pyecharts | 醫(yī)院藥品銷售數(shù)據(jù)可視化
墻裂推薦!幾個(gè)Jupyter Notebook 超實(shí)用插件(一)
可視化 | Python分析中秋月餅,這幾種口味才是yyds!
可視化 | Pyecharts動(dòng)態(tài)繪制比特幣近幾年股價(jià)變遷
爬取《白蛇2:青蛇劫起》20000+影評數(shù)據(jù)分析可視化
123個(gè)Pandas常用基礎(chǔ)指令,真香!
爬蟲+可視化 | 動(dòng)態(tài)展示2020東京奧運(yùn)會獎(jiǎng)牌世界分布
Schedule + Pyecharts | 時(shí)間序列圖(動(dòng)態(tài)輪播圖)
Pandas+Pyecharts | 北京某平臺二手房數(shù)據(jù)分析+可視化
Pandas+Pyecharts | 2021中國大學(xué)綜合排名分析+可視化
可視化 | 用Python分析近5000個(gè)旅游景點(diǎn),告訴你假期應(yīng)該去哪玩
可視化 | Python陪你過520:在你身邊,你在身邊
可視化 | Python制作最炫3D可視化地圖
爬蟲 | Python爬取豆瓣電影Top250 + 數(shù)據(jù)可視化
爬蟲 | 用python構(gòu)建自己的IP代理池,再也不擔(dān)心IP不夠用啦!
技巧 | python定時(shí)發(fā)送郵件(自動(dòng)添加附件)
技巧 | 20個(gè)Pycharm最實(shí)用最高效的快捷鍵(動(dòng)態(tài)展示)
技巧 | Python制作朋友圈炫酷九宮格圖片
基礎(chǔ) | 徹底搞懂Python異常處理:try-except-else-finally
基礎(chǔ) | Python函數(shù)一文詳解