【Python】在模仿中精進數(shù)據(jù)可視化09:近期基金漲幅排行可視化
?本文完整代碼及數(shù)據(jù)已上傳至
?Github倉庫https://github.com/CNFeffery/FefferyViz
1 簡介
最近幾個月一是工作繁忙,二是將業(yè)余的注意力多數(shù)放在Dash系列教程的撰寫上,因此費老師我已經(jīng)很久很久很久沒有更新過「在模仿中精進數(shù)據(jù)可視化」系列文章了??,今天繼續(xù)第9期~
我們今天要繪制的數(shù)據(jù)可視化作品,靈感來源于DT財經(jīng)某篇文章的一幅插圖,原圖如下:

這幅圖其實可以說是柱狀蝴蝶圖的一種變種,用極坐標系代替平面坐標系,左上和右下彼此分離相對的半圓均以逆時針方向?qū)?shù)據(jù)排行進行帶色彩映射的可視化,非常的美觀,容易給人留下深刻的印象。
而今天的文章我們換個數(shù)據(jù)源,基于近3個月「股票型」以及「債券型」基金各自漲幅的前十名數(shù)據(jù)(數(shù)據(jù)來源東方財富網(wǎng)),來基于matplotlib使用同樣的方式進行表達。
2 復(fù)刻過程
2.1 拆解主要視覺元素
其實這幅作品繪制起來主要的難度在于極坐標系下很多matplotlib涉及到的API都比較冷門,如果是對matplotlib不太熟悉的朋友可能會感覺無從下手。
按照慣例,我們先來拆解一下這幅圖的主要構(gòu)圖元素:
「分離的兩部分半圓區(qū)域」
這幅作品中的主體區(qū)域當數(shù)左上及右下區(qū)域?qū)?yīng)的兩個半圓,它們之間是存在一定寬度的間隔,因此我們需要創(chuàng)建兩個極坐標系子圖,并調(diào)整位置,形成彼此相對的樣子,我們可以先使用plt.subplots()開辟畫布,再針對畫布對應(yīng)Figure對象執(zhí)行add_axes()方法調(diào)整位置,插入polar=True的極坐標子圖。
再配合set_xlim()、set_ylim(),以及極坐標系子圖專有的set_thetagrids()、set_rgrids和set_theta_offset()來完成限定圓形顯示的角度范圍、半徑范圍,自定義網(wǎng)格線以及修改旋轉(zhuǎn)角度等作用,這一步后形成圖2:

「利用fill_between()來映射數(shù)據(jù)」
接下來我們就需要將數(shù)據(jù)映射到極坐標系中,可以選擇「柱狀圖」或「面積填充」的方式進行繪制,我這里為了操作自由度更高,選擇配合fill_between()來基于面積填充進行映射(調(diào)色盤方案基于palettable),因為是極坐標系,所以對應(yīng)傳入的參數(shù)變成了角度范圍和半徑序列,配合一些額外線條和白色填充后,效果如下:

「文字標注」
因為我們的基金數(shù)據(jù)中,基金的名稱普遍較長,且我還希望標注出每個扇形區(qū)域?qū)?yīng)的漲幅數(shù)額,因此我使用環(huán)繞型的文字標注方式,基于matplotlib的text()方法,結(jié)合每個扇形區(qū)域的對應(yīng)角度范圍,在循環(huán)過程中推導(dǎo)出標注文字的旋轉(zhuǎn)角度,這一步后得到的效果如下:

這一步需要注意的是,matplotlib中text()在旋轉(zhuǎn)時,其針對水平和豎直方向?qū)R方式,在極坐標系中有些要注意的地方,我在上圖中設(shè)置了參數(shù)rotation_mode='anchor',它幫助我們「先旋轉(zhuǎn)文字,再對齊」,如果不加這個參數(shù),會「先對齊再旋轉(zhuǎn)」,得到的效果會很混亂:

2.2 完成復(fù)刻
在上述拆解的基礎(chǔ)上,加上一些對細節(jié)的補充,便得到下面的作品:

完整數(shù)據(jù)及代碼你可以在文章開頭的Github倉庫中對應(yīng)找到。
以上就是本文的全部內(nèi)容,歡迎在評論區(qū)與我進行交流討論~

往期精彩回顧 本站qq群851320808,加入微信群請掃碼:
