Python-Matplotlib动态曲线图(linechart)绘制
效果預覽
配上動感的音樂感覺就是不一樣啊,要達到上述效果除了核心的Matplotlib繪圖外,其他工具和上篇推文?Hans Rosling Charts Matplotlib 繪制所使用的工具一樣啊。下面將分以下幾個部分對制作過程進行介紹。
01. 引言
動態曲線圖不同于動態氣泡圖,它可以查看部分指標在一段時間內的變化趨勢,本期推文將推出動態曲線圖的?Matplotlib?繪制過程,核心過程為?折線圖?和 散點圖 的繪制,詳細過程如下:
02. 數據處理
由于需要查某些指標隨時間的變化趨勢,可將數據處理成如下形式(部分):
圖表中的?china、usa、japan?等變量可以結合自己的實際需求進行更改,而?time?列則是時間變化。上述數據為本次繪制動態曲線圖所需數據,即從?gapminder?網站下載的平均個人收入(Income per person)數據整理而成,處理代碼主要如下:
這里?eq(nation)?操作為提取自己所需數據,最后通過?pandas?的?concat()?操縱進行提取數據合并即可。
03. 數據可視化
動態圖表的繪制主要在于折線圖和散點圖的繪制,我們采用的依舊還是面向對象式繪圖方式,這里建議繪制較為復雜的圖表時多采用此方法進行繪制。完整繪圖過程如下:
繪圖的核心代碼(以china為例)主要在第16-24行,詳細解釋如下:
idx = data_test.time折線圖:
其中,x?和?y?參數分別設置為數據的?time?列和?china?列,color?和線寬?lw?屬性則是為了美化折線圖。
散點圖:
散點圖的繪制則需知道我們只需要繪制最后一個散點,即獲取最后一個數據,因此scatter的x,y均有[-1]的索引,當然,我們需在之前使用tolist()方法轉變成數據列表形式,填充顏色?color、散點邊框顏色?edgecolor、散點大小?s、和線寬?lw?均可根據自己需要進行定制化設置。這里需要注意的是zorder屬性的設置,這里設置zorder=4,表示散點圖繪制在折線圖之后,即散點圖壓在折線圖之上,使繪圖更加美觀。
文本(國家名):
這里的?x?和?y?屬性則是根據實際情況進行慢慢調試 ,其他的屬性則是美化圖表使用。
文本(數值):
ax.text(idx.tolist()[-1]+5,data_test['china'].tolist()[-1]-250,'china',size=15,c= '#FF5872',va='top',ha='left',fontweight = 'bold')#國家名由于數據較大,這里
':{:,.0f}'.format(data_test['china'].tolist()[-1])對文本進行格式化操作,其他屬性則根據自己需求進行設置即可。
部分詳細解釋如下:
第?77-84?行則是添加位置固定的文本內容,設置?transform = ax.transAxes?則使文本位置不隨數據變化而變動。這里需要指出的是,一般的繪圖過程,固定文本一般都是在圖表的刻度、軸等屬性設置結束后再進行添加,這點則需要注意,好的繪圖習慣可以大大減少繪圖時間哦
第?66-71?行則是自定義 y 軸的刻度比例范圍,由于,較早年份的數據較為集中,使圖表繪制集中在一塊,影響美觀,特經此過程進行設置,而這也是?matplotlib 3.1?版本新添加的內容。
第?53?行使用?ax.axvline()?為動態圖表添加一條推進線。
第?54-64?行則是對圖表刻度、軸脊等 屬性進設置。
第?75?行采用ax.yaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))定制化刻度標簽形式,此方法對繪制定制化的刻度標簽非常有用,希望感興趣的同學們可以多看看官網的教程。
第?86?行?ax.set_axisbelow(True)?設置網格線等屬性位于圖表圖層之下。
下面給出一年份數據繪制的曲線圖結果:
備注:要想生成這種暗黑背景風格的圖表,則可通過以下設置完成:
04. 總結
Matplotlib繪制動態曲線圖較動態氣泡圖而言,繪制過程較為簡單,主要就是折線圖和散點圖的配合使用,其他的就是圖表屬性的定制化設置了,個人能力有限,發現錯誤的同學可以留言告知啊,下期我們將繼續推出Matplotlib動態圖系列的第三篇--動態條形圖 繪制方法。
E?N?D
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數據類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)
牛逼!Python函數和文件操作(長文系列第③篇)
牛逼!Python錯誤、異常和模塊(長文系列第④篇)
總結
以上是生活随笔為你收集整理的Python-Matplotlib动态曲线图(linechart)绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用 Python 实现多任务进程
- 下一篇: 用 python 制作高逼格的数学动画