Matplotlib 3.0 視覺化工具強勢來襲!
Matplotlib 3.0來了!新版Matplotlib已能通過PyPI安裝了,不過,這一版本只支援python 3,Python 2死忠還得繼續用2.2.x版本。

作為最熱門的Python 2D繪圖工具之一,你看到的論文、教程裡,有不少插圖出自它手。
3.0版總共有16項變化:
改進了預設後端選擇
現在,內建後端在執行時按順序嘗試,直到匯入了其中一個為止,不再要求預設後端必須作為構建過程的一部分來設定。
無頭Linux伺服器(由未定義的DISPLAY env來標識)不會選擇GUI後端。
新的迴圈調色盤

添加了兩種新調色盤:twilight和twilight_shifted。它們都以相同的顏色開始、結束,每個調色盤的兩半是對稱的,亮度相同顏色不同。
因為是迴圈的,所以它們很適合用在相位角、羅盤方向、一天中的時間等迴圈資料來上。
能按固定的數量級縮放軸
想要實現這個功能,需要為scilimits引數 Axes.ticklabel_format
設定相同的非零上限和下限。
比如說,要把y軸縮放100萬倍(1e6),程式碼是這樣的:
ax.ticklabel_format(style='sci', scilimits=(6, 6), axis='y')
scilimits=(0, 0)
的行為還和原來一樣,Matplotlib會根據軸上的數值來調整數量級,不讓它保持固定。以前,設定 scilimits=(m, m)
和設定 scilimits=(0, 0)
是一樣的。
為mpl_toolkits新增 AnchoredDirectionArrows
AnchoredDirectionArrows
是一個新增的mpl_toolkits類,它能繪製一對正交箭頭,在2D圖表上指示方向。
有幾個可選引數能改變佈局,比如旋轉箭頭、改變顏色等等,箭頭的頭尾兩部分長度、位置、寬度都能調整。
彩條能準確顯示次要刻度線了
新增了 colorbar.Colobar.minorticks_on()
方法(method),用來正確顯示彩條上的次要刻度標記;與之相對的 colorbar.Colobar.minorticks_off()
,可以移除次要刻度。
自動處理顏色條上的標記
以前,在大號彩條上加了標記(比如次要刻度線)之後,縮小彩條,標記就看起來很恐怖。
現在,標記的數量可以隨著彩條大小響應式變化了。
不再自動給重名檔案改名
以前,用GUI的儲存對話方塊來儲存圖表檔案時,如果它和磁碟上已有檔案重名,Matplotlib會自動加個字尾。
現在,遇到重名的情況,Matplotlib會提示使用者,詢問是否覆蓋。
可以設定圖例標題字號了
現在,可以通過 title_fontsize
這個kwarg來設定Figure.legend和Axes.legend的字號了,還新增了一個 rcParams["legend.title_fontsize"]
。
二者的預設值都是None,也就是說圖例標題和軸標題的預設字號是相同的。
注意:是圖例標題,不是圖例本身。
rcParams支援用markevery設定axes.prop_cycle屬性
Matplotlib裡的 rcParams
設定物件,現在支援通過用 markevery
Line2D物件property的迴圈器來配置 axes.prop_cycle
屬性(attribute)。
pgf後端支援多頁PDF
from matplotlib.backends.backend_pgf import PdfPages
import matplotlib.pyplot as plt
with PdfPages( 'multipage.pdf' ) as pdf:
# page 1
plt.plot([ 2 , 1 , 3 ])
pdf.savefig()
# page 2
plt.cla()
plt.plot([ 3 , 1 , 2 ])
pdf.savefig()
預設餅圖終於圓了
這是一個重大進步。(正經臉.jpg)
以前,Matplotlib的一大槽點就是餅圖都是蛋形的。如果你還想調回原來的預設蛋型餅圖,可以用 ax.set_aspect("auto")
或者 plt.axis("auto")
把縱橫軸的比設為自動。
新增SubplotBase.get_gridspec
通過這種新方法,使用者可以輕鬆獲取gridspec。
import matplotlib.pyplot as plt
fig, axs = plt.subplots( 3 , 2 )
gs = axs[ 0 , -1 ].get_gridspec()
# remove the last column
for ax in axs[:, -1 ].flatten():
ax.remove()
# make a subplot in last column that spans rows.
ax = fig.add_subplot(gs[:, -1 ])
plt.show()
軸標題不會再與x軸重疊了
以前,如果軸標題與x軸重疊,需要手動調整。
現在,如果x軸在頂部,軸標題會自動移到它上方。使用者想手動調整標題位置依然可以,不過有個小問題:不能放在預設的位置,放了系統就會自動移開。如果非要放,可以選一個接近的數字。比如說, ax.title.set_position(0.5, 1.0)
就會被自動移開,改成 ax.title.set_position(0.5, 1.01)
就可以了。
GridSpec有了新便捷方法
現在, gridspec.GridSpec
和 gridspec.GridSpecFromSubplotSpec
都有了便捷新方法,可以分別用 Figure.add_gridspec
和 SubplotSpec.subgridspec
替代。
import matplotlib.pyplot as plt
fig = plt.figure()
gs0 = fig.add_gridspec( 3 , 1 )
ax1 = fig.add_subplot(gs0[ 0 ])
ax2 = fig.add_subplot(gs0[ 1 ])
gssub = gs0[ 2 ].subgridspec( 1 , 3 )
for i in range( 3 ):
fig.add_subplot(gssub[ 0 , i])
Figure有了add_artist方法
Figure
類新增了 add_artist
方法,可以直接用artist和figure相加。例如:
circ = plt.Circle(( .7 , .5 ), .05 )
fig.add_artist(circ)
:math:指令重新命名為:mathmpl:
matplotlib.sphinxext.mathmpl
提供的第 :math:
個角色已經重新命名為 :mathmpl:
,避免了和Sphinx 1.9預設提供的 :math:
衝突。
當使用1.8以下版本的Sphinx, :math:
和 :mathmpl:
都能反向相容。
傳送門
安裝Matplotlib和依賴項,用這兩行程式碼:
python -mpip install -U pip
python -mpip install -U matplotlib
原文釋出時間為:2018-09-25
本文作者:李林