轉發本文并私信我"Python",即可獲得Python資料以及各種心得(持續更新的)
前言Python 可視化庫非常多,其中 matplotlib 是優缺點明顯的一個庫,優點是它非常靈活,缺點就是學習起來相對複雜。
最近在整理 matplotlib 入門所需核心知識點,會順帶編寫各種練習,其中主要關注如何獲得快速自學 matplotlib 的思路。
本文目标圖表如下:
matplotlib 有2種風格的 api:
面向對象風格非常适合入門,因此我統一使用這種風格
本文所需要的庫如下:
本次使用 vega_datasets 的小麥數據:
類似在一張紙上畫出多種圖表,其中紙就是放置圖表的容器。在 matplotlib 中,這個容器稱為 Figure。
因此,代碼如下:
"axes 是啥玩意?"
其中 axes 就是坐标系,可以把它看作是一個圖表。
subplots 默認參數下,隻會生成1個圖表,因此現在看起來就是"這張紙(Figure)被1個圖表(axes)占滿"。
顯然,我們需要在 axes 上添加圖表各種細節,最重要的當然是數據:
但是,圖表看起來有問題:
修改數據源的類型:
現在,柱子像點樣子,但是 x 軸上亂七八糟:
雖然此時圖表還沒有做大最終效果,但是基本形狀已經出來。
接下來基本是細節操作。
初學者難以入門 matplotlib 其中一個原因是,他的方法很多,很多時候你甚至不知道如何在網上查找。
接下來就是我要介紹的,如何利用 matplotlib 的幫助,推測出我們需要的方法
各種細節的調整
首先,我們希望調整 x 軸上刻度标簽的顯示角度。
在 matplotlib 中對應這些概念:
通常我們的操作都是基于 axes ,因為我們總是在操作某個圖表。
看看這個 axes 有什麼可以讓我們操作的:
看了一下,找到我們的目标:
怎麼獲取,非常簡單:
"但是我們需要設置的是這些刻度标簽的角度,拿一堆刻度标簽有啥用?"
顯然,調整角度是需要設置這些"刻度标簽"對象的某個屬性,按照之前的方法,查看一下:
果然,找到需要的屬性:
萬事俱備了:
圖表成這樣子:
"好像沒多大改善呀"
這是因為我們的"圖紙"不夠寬,空間有限,自然要壓縮"圖紙"中的内容。
适當調整"圖紙"的大小:
現在效果如下:
"我怎麼知道這個 subplots 方法中可以設置這個參數?"
這需要查看他的文檔,但是,之前我們已經學過查看某個東西可以調整的屬性。
我們可以換另一種方式實現一樣的效果。
用 plt.setp 方式,找到屬性 figwidth ,顯然這是"圖紙"的寬度,于是可以這麼寫:
做到這裡,你應該會覺得任意使用一個可視化的庫,可能1、2行代碼即可完成,為啥要折騰這麼多?
matplotlib 的靈活在于控制細節。
現在剩下如何把最小與最大值的柱子标記不同顔色
面向對象設計,意味着圖表上你能看到的東西基本上都有一種對象代表他。
現在我們需要找到圖表生成的每個柱子。他們在哪裡?
原來,本身當我們調用 axes.bar 方法時,這個方法返回的就是這些小柱子:
顯然,這是一個集合,我們需要修改其中的某幾個柱子的顔色,老規矩查到屬性:
現在隻需要找到哪個是最小和最大值的柱子就行了:
均值線有特定的方法:
這裡涉及一個比較高級的概念——投影與轉換,這裡不作介紹
圖表如下:
接下來就是其他修飾
覺得圖表風格有些單調?
看看有哪些内置風格可以選:
選用 ggplot 看看效果:
現在看起來有點辣眼睛:
再設置一下 x、y 軸的名字與整個圖表的标題。
用之前的方式,從 axes 中可以輕易找到需要的屬性:
但是,字體有些小:
好吧,全局設置字體大小:
接下來我會繼續編寫更多非常規要求的圖表,敬請關注!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!