Matplotlib 3.1 的新功能 (2019年5月18日)#

如需自上次修訂以來的所有問題和提取請求的清單,請參閱 3.10.0 的 GitHub 統計資訊 (2024年12月13日)

新功能#

ConciseDateFormatter#

預設使用的自動日期格式化程式可能會非常冗長。現在可以使用一個新的格式化程式,它會嘗試使刻度標籤適當簡潔。

(原始碼, 2x.png, png)

次要 x/y 軸支援#

一個新的方法提供了透過 Axes.secondary_xaxisAxes.secondary_yaxis 在現有軸上新增第二個軸的功能。請參閱 次要軸 以取得範例。

(原始碼, 2x.png, png)

FuncScale 用於任意軸刻度#

新增了一個新的 FuncScale 類別(以及 FuncTransform),允許使用者擁有任意的刻度轉換,而無需編寫 ScaleBase 的新子類別。可以透過以下方式存取:

ax.set_yscale('function', functions=(forward, inverse))

其中 forwardinverse 是可呼叫的物件,它們會傳回刻度轉換及其反向轉換。請參閱 刻度 中的最後一個範例。

散佈圖圖例#

引入了一種新的散佈圖圖例建立方法。先前,為了取得 scatter() 圖表的圖例,可以繪製多個散佈圖,每個散佈圖都有個別的標籤,或者手動建立代理藝術家以在圖例中顯示。現在,PathCollection 提供了一個方法 legend_elements(),以自動方式取得散佈圖的控制代碼和標籤。這使得建立散佈圖的圖例像以下一樣簡單:

(原始碼, 2x.png, png)

範例可以在 自動建立圖例 中找到。

Matplotlib 在 MacOSX 後端上不再需要框架應用程式建置#

先前版本的 matplotlib 需要 Python 的框架建置才能運作。應用程式類型已更新為不再需要此建置,因此 MacOSX 後端應該可以使用非框架的 Python 運作。

這也新增了對 PyPy3 的 MacOSX 後端支援。

Figure、FigureCanvas 和後端#

Figure.frameon 現在是 Figure 修補程式可見性狀態的直接代理#

存取 Figure.frameon(包括透過 get_frameonset_frameon)現在直接轉發到底層 Rectangle 藝術家的可見性(Figure.patch.get_frameonFigure.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_grid1axisartist 軸的脊椎會繪製兩次,導致「粗體」外觀。現在不再是這種情況。

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() 的匹配參數一樣。下面的圖顯示了這如何影響輸出。

(原始碼, 2x.png, png)

軸與刻度#

新增 Axis.get_invertedAxis.set_inverted#

Axis.get_invertedAxis.set_inverted 方法會查詢和設定軸是否使用「反向」方向(即,x 軸向左增加,y 軸向下增加)。

它們執行類似於 Axes.xaxis_invertedAxes.yaxis_invertedAxes.invert_xaxisAxes.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 方法)。

動畫與互動性#

支援滑鼠的前進/後退按鈕#

圖表管理器現在支援滑鼠按鈕的 button_press 事件,類似於 key_press 事件。這允許將動作繫結到滑鼠按鈕(請參閱 MouseButton)。此機制的首次應用是在使用 Qt5 後端建立的圖表中支援滑鼠的前進/後退按鈕。

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 的圖像,狀態列現在(使用預設設定)會將值顯示為 1000010001),而先前這兩個值都會顯示為 1e+04

MouseEvent 的 button 屬性現在是 IntEnum#

MouseEvent 實例的 button 屬性可以取值為 None、1(滑鼠左鍵)、2(滑鼠中鍵)、3(滑鼠右鍵)、"up"(滾輪向上)和 "down"(滾輪向下)。為了更好的易讀性,1、2 和 3 值現在使用 enum.IntEnum 類別 matplotlib.backend_bases.MouseButton 表示,其值為 MouseButton.LEFT== 1)、MouseButton.MIDDLE== 2)和 MouseButton.RIGHT== 3)。

設定、安裝和開發#

MATPLOTLIBRC 環境變數現在可以指向任何「檔案」路徑#

這包括裝置檔案;特別是在 Unix 系統上,可以將 MATPLOTLIBRC 設定為 /dev/null 以忽略使用者的 matplotlibrc 檔案,並回退到 Matplotlib 的預設值。

提醒一下,如果 MATPLOTLIBRC 指向一個目錄,Matplotlib 會嘗試從 $MATPLOTLIBRC/matplotlibrc 載入 matplotlibrc 檔案。

允許 MATPLOTLIBRC 檔案中的 LaTeX 程式碼 pgf.preambletext.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 以顯示更詳細(或更少)的日誌記錄輸出。