Matplotlib 3.1 的新功能 (2019年5月18日)#
如需自上次修訂以來的所有問題和提取請求的清單,請參閱 3.10.0 的 GitHub 統計資訊 (2024年12月13日)。
新功能#
ConciseDateFormatter
#
預設使用的自動日期格式化程式可能會非常冗長。現在可以使用一個新的格式化程式,它會嘗試使刻度標籤適當簡潔。

次要 x/y 軸支援#
一個新的方法提供了透過 Axes.secondary_xaxis
和 Axes.secondary_yaxis
在現有軸上新增第二個軸的功能。請參閱 次要軸 以取得範例。

FuncScale
用於任意軸刻度#
新增了一個新的 FuncScale
類別(以及 FuncTransform
),允許使用者擁有任意的刻度轉換,而無需編寫 ScaleBase
的新子類別。可以透過以下方式存取:
ax.set_yscale('function', functions=(forward, inverse))
其中 forward
和 inverse
是可呼叫的物件,它們會傳回刻度轉換及其反向轉換。請參閱 刻度 中的最後一個範例。
散佈圖圖例#
引入了一種新的散佈圖圖例建立方法。先前,為了取得 scatter()
圖表的圖例,可以繪製多個散佈圖,每個散佈圖都有個別的標籤,或者手動建立代理藝術家以在圖例中顯示。現在,PathCollection
提供了一個方法 legend_elements()
,以自動方式取得散佈圖的控制代碼和標籤。這使得建立散佈圖的圖例像以下一樣簡單:

範例可以在 自動建立圖例 中找到。
Matplotlib 在 MacOSX 後端上不再需要框架應用程式建置#
先前版本的 matplotlib 需要 Python 的框架建置才能運作。應用程式類型已更新為不再需要此建置,因此 MacOSX 後端應該可以使用非框架的 Python 運作。
這也新增了對 PyPy3 的 MacOSX 後端支援。
Figure、FigureCanvas 和後端#
Figure.frameon 現在是 Figure 修補程式可見性狀態的直接代理#
存取 Figure.frameon
(包括透過 get_frameon
和 set_frameon
)現在直接轉發到底層 Rectangle 藝術家的可見性(Figure.patch.get_frameon
、Figure.patch.set_frameon
)。
pil_kwargs 引數已新增至 savefig#
Matplotlib 使用 Pillow 來處理儲存為 JPEG 和 TIFF 格式。 savefig()
函式獲得了 pil_kwargs 關鍵字引數,可以用來將引數轉發給 Pillow 的 PIL.Image.Image.save
。
當儲存為 PNG 時,也可以使用 pil_kwargs 引數。在這種情況下,Matplotlib 也會使用 Pillow 的 PIL.Image.Image.save
,而不是透過它自己的內建 PNG 支援。
將 inaxes
方法新增至FigureCanvasBase
#
FigureCanvasBase
類別現在有一個 inaxes
方法,用於檢查點是否在軸內,並傳回最頂層的軸,否則傳回 None。
cairo 後端預設為 pycairo 而不是 cairocffi#
這在某些情況下會導致更快的匯入/執行效能。如果 pycairo 不可用,後端將會回退到 cairocffi。
軸和藝術家#
axes_grid1 和 axisartist 軸不再繪製兩次脊椎#
先前,axes_grid1
和 axisartist
軸的脊椎會繪製兩次,導致「粗體」外觀。現在不再是這種情況。
ArtistInspector.get_aliases 的傳回型別已變更#
ArtistInspector.get_aliases
先前將別名的集合傳回為 {fullname: {alias1: None, alias2: None, ...}}
。在早期版本的 Python 中,字典到 None 的對應用於模擬集合。現在已由集合取代,即 {fullname: {alias1, alias2, ...}}
。
這個值也儲存在 ArtistInspector.aliasd
中,它也同樣被更改了。
ConnectionPatch
接受任意的轉換#
除了像 "data"
或 "axes fraction"
這樣的字串外,ConnectionPatch
現在接受任何 Transform
作為 *coordsA* 和 *coordsB* 參數的輸入。這允許在不同的使用者定義座標系統中定義的點之間繪製線條。另請參閱 使用 ConnectionPatch。
mplot3d Line3D 現在允許 {set,get}_data_3d#
在 mplot3d 中使用 3D 投影建立的線條現在可以使用 get_data_3d()
來存取資料,它會返回一個包含 (x, y, z) 資料的類陣列元組。等效的 set_data_3d
可用於修改現有 Line3D 的資料。
Axes3D.voxels
現在會為產生的體素著色#
Axes3D.voxels
方法現在接受一個預設為 True
的 *shade* 參數。這會根據表面的方向進行著色,其行為與 plot_trisurf()
和 bar3d()
的匹配參數一樣。下面的圖顯示了這如何影響輸出。

軸與刻度#
新增 Axis.get_inverted
和 Axis.set_inverted
#
Axis.get_inverted
和 Axis.set_inverted
方法會查詢和設定軸是否使用「反向」方向(即,x 軸向左增加,y 軸向下增加)。
它們執行類似於 Axes.xaxis_inverted
、Axes.yaxis_inverted
、Axes.invert_xaxis
和 Axes.invert_yaxis
的任務,唯一的區別是 Axis.set_inverted
更容易設定軸的反向,無論它之前是否已被反向。
調整預設的次要刻度間距#
對於間隔 2.5 個單位的主要刻度,預設的次要刻度間距從 0.625 更改為 0.5。
EngFormatter
現在接受 *usetex*、*useMathText* 作為僅限關鍵字的引數#
已在 EngFormatter
中新增了一個公共 API,以控制刻度標籤中的數字如何呈現。預設情況下,*useMathText* 的值為 rcParams["axes.formatter.use_mathtext"]
(預設值:False
),而 *usetex* 的值為 rcParams["text.usetex"]
(預設值:False
)。
如果其中一個為 True
,則數字將以 $
符號括起來。當使用 TeX
時,這表示數字將以 TeX 的數學字體顯示。當使用 mathtext 時,數字周圍的 $
符號將確保 Unicode 呈現(如 mathtext 所暗示的)。這將確保在使用 mathtext 時,刻度中的負號會呈現為 Unicode 負號 (U+2212)(而無需依賴 fix_minus
方法)。
動畫與互動性#
save()
的 *progress_callback* 引數#
Animation.save
方法新增了一個可選的 *progress_callback* 引數,用於通知儲存進度。
在 animation.FuncAnimation
中新增 cache_frame_data
僅限關鍵字的引數#
matplotlib.animation.FuncAnimation
預設情況下會快取影格資料;但是,在某些情況下,此快取並不理想,例如,當 FuncAnimation
只需要以互動方式繪製(而不是儲存),並且影格資料所需的記憶體相當大時。透過新增 *cache_frame_data* 僅限關鍵字的引數,使用者現在可以停用此快取;因此,這個新的引數為問題 #8528 提供了修復。
使用 PillowWriter 的無限循環 GIF#
我們了解到大多數人希望多次觀看 GIF。現在使用 PillowWriter 將動畫儲存為 GIF 會產生無限循環的 GIF。
調整 matplotlib.widgets.Slider
以具有垂直方向#
現在 matplotlib.widgets.Slider
小工具接受一個可選的參數 orientation,表示滑桿應該採取的方向('horizontal'
或 'vertical'
)。
改進當存在色彩條時,滑鼠游標下方圖像值的格式#
當存在色彩條時,現在會使用它的格式化器來格式化狀態列中滑鼠游標下方的圖像值。例如,對於顯示值 10,000 和 10,001 的圖像,狀態列現在(使用預設設定)會將值顯示為 10000
和 10001
),而先前這兩個值都會顯示為 1e+04
。
設定、安裝和開發#
MATPLOTLIBRC 環境變數現在可以指向任何「檔案」路徑#
這包括裝置檔案;特別是在 Unix 系統上,可以將 MATPLOTLIBRC
設定為 /dev/null
以忽略使用者的 matplotlibrc 檔案,並回退到 Matplotlib 的預設值。
提醒一下,如果 MATPLOTLIBRC
指向一個目錄,Matplotlib 會嘗試從 $MATPLOTLIBRC/matplotlibrc
載入 matplotlibrc 檔案。
允許 MATPLOTLIBRC 檔案中的 LaTeX 程式碼 pgf.preamble
和 text.latex.preamble
#
先前,rc 檔案金鑰 rcParams["pgf.preamble"]
(預設值:''
) 和 rcParams["text.latex.preamble"]
(預設值:''
) 會使用逗號作為分隔符號來解析。這會破壞有效的 LaTeX 程式碼,例如
\usepackage[protrusion=true, expansion=false]{microtype}
解析已修改為將整行傳遞給 LaTeX 系統,保留所有逗號。從 Python 腳本中傳遞字串列表仍然像以前一樣有效。
新的日誌記錄 API#
可以呼叫 matplotlib.set_loglevel
/ pyplot.set_loglevel
以顯示更詳細(或更少)的日誌記錄輸出。