Matplotlib 2.0 的新功能 (2017 年 1 月 17 日)#
注意
Matplotlib 2.0 支援 Python 2.7 和 3.4+
預設樣式的變更#
v2.0 的主要變更與徹底修改預設樣式有關。
改進的色彩轉換 API 和 RGBA 支援#
colors
獲得了新的色彩轉換 API,完全支援 alpha 通道。主要的公開函數是 is_color_like()
、matplotlib.colors.to_rgba()
、matplotlib.colors.to_rgba_array()
和 to_hex()
。RGBA 四元組以十六進位格式編碼為 "#rrggbbaa"。
一個額外的好處是,Qt 選項編輯器現在也允許設定藝術家的 alpha 通道。
新組態 (rcParams)#
新增的 rcparams
在 rcParams 中加入了 svg.hashsalt
鍵#
如果 svg.hashsalt
為 None
(預設值),svg 後端會使用 uuid4
來產生雜湊鹽。如果它不是 None
,則必須是一個字串,該字串會被用作雜湊鹽,而不是 uuid4
。這樣可以產生確定性的 SVG 輸出。
移除 svg.image_noscale
rcParam#
由於影像處理的重大變更,svg.image_noscale
rcParam 已被移除。相同的行為可以透過在個別影像上設定 interpolation='none'
,或使用 image.interpolation
rcParam 全域設定來達成。
定性色彩映射#
ColorBrewer 的「定性」色彩映射 (「Accent」、「Dark2」、「Paired」、「Pastel1」、「Pastel2」、「Set1」、「Set2」、「Set3」) 原本是為離散的類別資料而設計,不暗示任何值,因此已轉換為 ListedColormap
而不是 LinearSegmentedColormap
,所以顏色將不再進行內插,並且它們可以用於等值區域圖、標記的影像特徵等等。
軸位移標籤現在會回應 *labelcolor*#
當 *labelcolor* 變更時,軸位移標籤現在會與軸刻度標記著色相同。
改進的位移文字選擇#
預設的位移文字選擇已變更為僅使用所有刻度共通的有效數字 (例如 1231..1239 -> 1230,而不是 1231),除非它們跨越相對較大的 10 的冪倍數,在這種情況下會選擇該倍數 (例如 1999..2001 -> 2000)。
樣式參數黑名單#
為了防止使用樣式造成意外後果,樣式檔案不再能夠設定會影響與樣式無關的事物的參數。這些參數包括
'interactive', 'backend', 'backend.qt4', 'webagg.port',
'webagg.port_retries', 'webagg.open_in_browser', 'backend_fallback',
'toolbar', 'timezone', 'datapath', 'figure.max_open_warning',
'savefig.directory', 'tk.window_focus', 'docstring.hardcopy'
預設字型的變更#
matplotlib 在文字中使用的預設字型已變更為無襯線字體的 DejaVu Sans 和襯線字體的 DejaVu Serif。DejaVu 字型系列基於先前的 matplotlib 預設字型 --Bitstream Vera--,但包含更廣泛的字元範圍。
預設的數學文字字型已從 Computer Modern 變更為 DejaVu 系列,以保持與一般文字的一致性。mathtext.fontset
設定參數新增了兩個新選項:dejavusans
(預設值) 和 dejavuserif
。這兩個選項都會盡可能使用 DejaVu 字形,當在 DejaVu 中找不到字形時,則會回到 STIX 符號。若要恢復先前的行為,請將 rcParam mathtext.fontset
設定為 cm
。
更快的文字渲染#
在 Agg 後端中渲染文字現在較不模糊,而且繪製速度快約 20%。
Qt 圖形選項編輯器的改進#
針對 Qt 圖形選項編輯器實施了各種可用性改進,其中包括
線條樣式項目現在會排序,且不會有重複項目。
現在可以為影像設定色彩映射和標準化限制。
浮點數值的線條編輯現在只會顯示避免精確度損失所需的位數。此外,還修正了一個關於使用 Qt5 和小數分隔符為「,」的地區設定的輸入驗證的重要錯誤。
軸選擇器現在會使用較短、更使用者友善的軸名稱,而且如果沒有軸,則不會崩潰。
即使有超過 10 個項目,使用預設標籤 ("_lineX", "_imageX") 的線條和影像項目現在也會以數值排序。
改進的影像支援#
在 2.0 版之前,matplotlib 會先套用色彩映射,然後調整結果大小,以此來重新取樣影像。由於重新取樣是在彩色影像上執行的,這會在輸出影像中引入實際上並不存在於色彩映射中的顏色。現在,會先重新取樣影像 (如果輸入影像為浮點數,則完全以浮點數進行),然後再套用色彩映射。
為了進行這項重大變更,影像處理程式碼幾乎完全被重寫。作為副作用,影像重新取樣使用的記憶體比以前更少,而且資料類型轉換也較少。
已移除透過設定私有成員 _image_skew_coordinate
來「傾斜」影像的實驗性私有功能。取而代之的是,影像將遵循繪製它們的軸的轉換。
影像圖上的非線性刻度#
imshow
現在會在套用非線性刻度後,於資料空間中要求的點繪製資料。
左側的影像展示了新的正確行為。可以使用 pcolormesh
重新建立舊的行為,如右側所示。

可以透過類比方式來理解這一點:在對數 x 軸上繪製具有線性間隔 bin 的直方圖。等大小的 bin 在較小的 *x* 值會顯示為較寬,在較大的 *x* 值會顯示為較窄。
在 NbAgg 和 WebAgg 後端中支援 HiDPI (Retina) 顯示器#
NbAgg 和 WebAgg 後端現在將使用您的高像素密度顯示器的完整解析度。
預設動畫編碼的變更#
預設的動畫編碼已從 mpeg4
變更為更有效率的 h264
。可以透過 animation.codec
rcParam 進行設定。
已棄用動畫中對 mencoder 的支援#
使用 mencoder 搭配 mpl 來寫入影片檔案會產生問題;強烈建議切換至 ffmpeg。所有對 mencoder 的支援將在 2.2 版本中移除。
箱形圖 Zorder 關鍵字引數#
zorder 參數現在可供 boxplot
使用。這允許在繪圖函式呼叫中設定箱形圖的 z 順序。
boxplot(np.arange(10), zorder=10)
填滿的 +
和 x
標記#
rcount 和 ccount 用於 plot_surface
#
從 v2.0 開始,mplot3d 的 plot_surface
現在接受 rcount 和 ccount 引數,以控制繪圖時輸入資料的取樣。這些引數指定從輸入資料中取出的最大等間隔樣本數。這些引數也是函式的新預設取樣方法,並被視為樣式變更。
舊的 rstride 和 cstride 引數(指定等間隔樣本的大小)在調用「classic」模式時會成為預設值,且仍可使用。目前沒有計畫要棄用這些引數。
串流圖 Zorder 關鍵字引數變更#
streamplot
的 zorder
參數現在的預設值為 None
而非 2
。如果 zorder
給定為 None
,則 streamplot
的預設 zorder
為 matplotlib.lines.Line2D.zorder
。
擴展到 matplotlib.backend_bases.GraphicsContextBase
#
為了支援跨後端的標準化陰影線行為,我們將 matplotlib.backend_bases.GraphicsContextBase.get_hatch_color
方法新增至 matplotlib.backend_bases.GraphicsContextBase
。這僅在我們提供的後端中的渲染過程中使用,因此不會破壞任何第三方後端。
如果您維護一個擴展 GraphicsContextBase
的第三方後端,則現在可以使用此方法,並且應使用它來為陰影線圖案著色。