Matplotlib 3.0 的新功能 (2018 年 9 月 18 日)#

改進的預設後端選擇#

預設後端不再需要在建置過程中設定。取而代之的是,在執行時,會依序嘗試內建的後端,直到其中一個成功導入。

無頭 Linux 伺服器(透過未定義的 DISPLAY 環境變數識別)將不會選擇 GUI 後端。

循環色彩映射表#

新增了兩個名為「twilight」和「twilight_shifted」的色彩映射表。這些色彩映射表在相同的顏色上開始和結束,並且有兩個具有相等亮度但發散顏色的對稱一半。由於它們環繞,因此它們是循環數據(如相位角、羅盤方向或一天中的時間)的良好選擇。與 *viridis* 和 *cividis* 一樣,*twilight* 在感知上是均勻的且對色盲友善。

能夠以固定的數量級縮放軸#

若要以固定的數量級縮放軸,請將 Axes.ticklabel_formatscilimits 參數設定為相同(非零)的上下限。例如,若要將 y 軸縮放一百萬 (1e6),請使用

ax.ticklabel_format(style='sci', scilimits=(6, 6), axis='y')

scilimits=(0, 0) 的行為保持不變。使用此設定,Matplotlib 將根據軸值調整數量級,而不是保持固定。先前,設定 scilimits=(m, m) 相當於設定 scilimits=(0, 0)

AnchoredDirectionArrows 功能新增至 mpl_toolkits#

新的 mpl_toolkits 類別 AnchoredDirectionArrows 會繪製一對正交箭頭,以指示 2D 圖上的方向。一個最小的工作範例需要座標系統的轉換物件(通常是 ax.transAxes)和箭頭標籤。有幾個可選參數可用於變更佈局。例如,可以旋轉箭頭對並變更顏色。預設情況下,標籤和箭頭具有相同的顏色,但是該類別也可以傳遞參數以自訂箭頭和文字佈局,這些參數會傳遞給 matplotlib.textpath.TextPathmatplotlib.patches.FancyArrowPatch。可以調整箭頭尾部和頭部的位置、長度和寬度,方向箭頭和標籤可以有一個框架。可以調整填補和間隔參數。

為顏色條新增 minorticks_on()/off() 方法#

新增了一個新的方法 ColorbarBase.minorticks_on,以正確顯示顏色條上的次要刻度。當 extend 關鍵字參數(在建立顏色條時使用)設定為「both」、「max」或「min」時,此方法不允許次要刻度延伸到 vmin 和 vmax 之外的區域。還新增了一個補充方法 ColorbarBase.minorticks_off,以移除顏色條上的次要刻度。

顏色條刻度現在可以是自動的#

先前放置在顏色條上的刻度數量適用於較大的顏色條,但是如果將顏色條縮小(例如,透過 shrink 關鍵字參數),看起來會很糟。這已變更為使刻度數量現在會根據顏色條的大小而有所反應。

不要自動重新命名重複的檔案名稱#

先前,當使用 GUI 的儲存對話框將圖形儲存到檔案時,如果預設檔名(基於圖形視窗標題)已存在於磁碟上,Matplotlib 會附加一個後綴(例如 Figure_1-1.png),防止對話框提示是否覆寫檔案。此行為已被移除。現在,如果檔案名稱已存在於磁碟上,則會提示使用者是否要覆寫。這消除了猜測,並允許有意的覆寫,尤其是在使用 figure.canvas.set_window_title() 手動設定圖形名稱時。

圖例現在有一個 title_fontsize 關鍵字參數(和 rcParam)#

Figure.legendAxes.legend 的標題現在可以透過 title_fontsize 關鍵字參數設定其字型大小。還有一個新的 rcParams["legend.title_fontsize"] (預設值:None)。兩者都預設為 None,這表示圖例標題將具有與軸預設字型大小相同的字型大小(不是圖例字型大小,由 fontsize 關鍵字參數或 rcParams["legend.fontsize"] (預設值:'medium') 設定)。

在 rcParams 中支援 axes.prop_cycle 屬性的 markevery #

Matplotlib rcParams 設定物件現在支援使用 markevery Line2D 物件屬性設定循環器 (cyclers) 的屬性 rcParams["axes.prop_cycle"] (預設值:cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))。

pgf 後端的支援多頁 PDF#

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()

圓餅圖現在預設為圓形#

我們承認大多數人不喜歡蛋形的圓餅圖。因此,繪製圓餅圖的軸預設會設定為具有相等的長寬比。這確保了圓餅圖的外觀為圓形,而與軸的大小或單位無關。若要還原為先前的行為,請使用 ax.set_aspect("auto")plt.axis("auto") 將軸的長寬比設定為自動。

ax.get_gridspec 新增至 SubplotBase#

新增了 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()

軸標題將不再與 xaxis 重疊#

先前,如果 xaxis 重疊(通常在將 xaxis 放置在軸的頂部時),則必須手動移動軸標題。現在,如果標題位於頂部,則標題會自動移動到 xaxis 及其裝飾器(包括 xlabel)上方。

如果需要,仍然可以手動放置標題。有一個小小的調整;演算法會檢查標題的 y 位置是否為 1.0(預設值),如果是,則會移動它。如果使用者將標題放置在預設位置(即 ax.title.set_position(0.5, 1.0)),則標題仍將移動到 xaxis 上方。如果使用者想要避免這種情況,他們可以指定一個接近的值(即 ax.title.set_position(0.5, 1.01)),並且標題將不會透過此演算法移動。

GridSpec 的新便利方法#

對於 gridspec.GridSpecgridspec.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 方法#

已將 add_artist 方法新增至 Figure 類別,允許將藝術家 (artists) 直接新增至圖形。例如:

circ = plt.Circle((.7, .5), .05)
fig.add_artist(circ)

如果新增的藝術家先前沒有設定轉換,它將被設定為圖形轉換 (fig.transFigure)。這個新方法可能對於將藝術家新增至沒有軸的圖形,或輕鬆在圖形座標中定位靜態元素很有用。

:math: 指令重新命名為 :mathmpl:#

matplotlib.sphinxext.mathmpl 提供的 :math: rst 角色已重新命名為 :mathmpl:,以避免與 Sphinx 1.8 預設提供的 :math: 角色衝突。(:mathmpl: 使用 Matplotlib 將數學運算式渲染成嵌入在 html 中的圖像,而 Sphinx 使用 MathJax。)

當使用 Sphinx<1.8 時,為了向後相容性,兩個名稱(:math::mathmpl:)仍然可用。