Matplotlib 3.0 的新功能 (2018 年 9 月 18 日)#
改進的預設後端選擇#
預設後端不再需要在建置過程中設定。取而代之的是,在執行時,會依序嘗試內建的後端,直到其中一個成功導入。
無頭 Linux 伺服器(透過未定義的 DISPLAY 環境變數識別)將不會選擇 GUI 後端。
循環色彩映射表#
新增了兩個名為「twilight」和「twilight_shifted」的色彩映射表。這些色彩映射表在相同的顏色上開始和結束,並且有兩個具有相等亮度但發散顏色的對稱一半。由於它們環繞,因此它們是循環數據(如相位角、羅盤方向或一天中的時間)的良好選擇。與 *viridis* 和 *cividis* 一樣,*twilight* 在感知上是均勻的且對色盲友善。
能夠以固定的數量級縮放軸#
若要以固定的數量級縮放軸,請將 Axes.ticklabel_format
的 scilimits 參數設定為相同(非零)的上下限。例如,若要將 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.TextPath
和 matplotlib.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.legend
和 Axes.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.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
方法#
已將 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:
)仍然可用。