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["date.autoformatter.year"] (預設值: '%Y')

「年份」刻度日期的格式字串

rcParams["date.autoformatter.month"] (預設值: '%Y-%m')

「月份」刻度日期的格式字串

rcParams["date.autoformatter.day"] (預設值: '%Y-%m-%d')

「日期」刻度日期的格式字串

rcParams["date.autoformatter.hour"] (預設值: '%m-%d %H')

「小時」刻度時間的格式字串

rcParams["date.autoformatter.minute"] (預設值: '%d %H:%M')

「分鐘」刻度時間的格式字串

rcParams["date.autoformatter.second"] (預設值: '%H:%M:%S')

「秒」刻度時間的格式字串

rcParams["date.autoformatter.microsecond"] (預設值: '%M:%S.%f')

「微秒」刻度時間的格式字串

rcParams["scatter.marker"] (預設值: 'o')

散佈圖的預設標記

rcParams["svg.hashsalt"] (預設值: None)

請參閱註解

rcParams["xtick.top"] (預設值: False), rcParams["xtick.major.top"] (預設值: True) rcParams["xtick.minor.top"] (預設值: True), rcParams["xtick.bottom"] (預設值: True), rcParams["xtick.major.bottom"] (預設值: True) rcParams["xtick.minor.bottom"] (預設值: True), rcParams["ytick.left"] (預設值: True), rcParams["ytick.minor.left"] (預設值: True), rcParams["ytick.major.left"] (預設值: True) rcParams["ytick.right"] (預設值: False), rcParams["ytick.minor.right"] (預設值: True), rcParams["ytick.major.right"] (預設值: True)

控制主要和次要刻度線的繪製位置。全域值會與對應的主要/次要值進行「且」運算。

rcParams["hist.bins"] (預設值: 10)

hist 中使用的預設 bin 數量。如果已安裝 numpy >= 1.11,則可以是 int、浮點數列表或 'auto'

rcParams["lines.scale_dashes"] (預設值: True)

線條的虛線模式是否應隨線條寬度縮放。

rcParams["axes.formatter.offset_threshold"] (預設值: 4)

觸發使用位移的刻度標籤中儲存的最小位數。

在 rcParams 中加入了 svg.hashsalt#

如果 svg.hashsaltNone (預設值),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 重新建立舊的行為,如右側所示。

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

可以透過類比方式來理解這一點:在對數 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 標記#

已新增新的可填滿的加號叉號標記。請參閱 markers 模組和 標記參考 範例。

rcountccount 用於 plot_surface#

從 v2.0 開始,mplot3d 的 plot_surface 現在接受 rcountccount 引數,以控制繪圖時輸入資料的取樣。這些引數指定從輸入資料中取出的最大等間隔樣本數。這些引數也是函式的新預設取樣方法,並被視為樣式變更。

舊的 rstridecstride 引數(指定等間隔樣本的大小)在調用「classic」模式時會成為預設值,且仍可使用。目前沒有計畫要棄用這些引數。

串流圖 Zorder 關鍵字引數變更#

streamplotzorder 參數現在的預設值為 None 而非 2。如果 zorder 給定為 None,則 streamplot 的預設 zordermatplotlib.lines.Line2D.zorder

擴展到 matplotlib.backend_bases.GraphicsContextBase#

為了支援跨後端的標準化陰影線行為,我們將 matplotlib.backend_bases.GraphicsContextBase.get_hatch_color 方法新增至 matplotlib.backend_bases.GraphicsContextBase。這僅在我們提供的後端中的渲染過程中使用,因此不會破壞任何第三方後端。

如果您維護一個擴展 GraphicsContextBase 的第三方後端,則現在可以使用此方法,並且應使用它來為陰影線圖案著色。