Matplotlib 2.2 新功能 (2018 年 3 月 6 日)#
約束佈局管理器#
警告
約束佈局是實驗性的。其行為和 API 可能會變更,或者整個功能可能會在沒有棄用期的情況下移除。
新增了一種自動決定子圖及其組織 GridSpec
實例之間間距的新方法。它旨在取代舊有的 tight_layout
方法。它是透過新的 constrained_layout=True
kwarg 呼叫,用於 Figure
或 subplots
。
此套件有新的 rcParams
,並且可以使用新的 set_constrained_layout_pads
更精細地調整間距。
功能包括
子圖的自動間距,子圖周圍和所有裝飾器都有固定的英吋大小的邊距,以及子圖之間間距為子圖大小的分數。
為
suptitle
和附加到多個軸的顏色條間距。使用
GridSpecFromSubplotSpec
的巢狀GridSpec
佈局。
如需更多詳細資訊和功能,請參閱新的教學課程:約束佈局指南
請注意存取此項的新 API
新的 plt.figure
和 plt.subplots
kwarg:constrained_layout
#
現在可以使用 constrained_layout=True
kwarg 呼叫 figure()
和 subplots()
,以啟用 constrained_layout。
新的 ax.set_position
行為#
現在,Axes.set_position
會使指定的軸不再回應 constrained_layout
,這與使用者想要手動放置軸的想法一致。
在內部,這表示舊的 ax.set_position
在程式庫內的呼叫已變更為私有的 ax._set_position
呼叫,以便 constrained_layout
仍然適用於這些軸。
GridSpec
的新 figure
kwarg#
為了方便使用 constrained_layout
,GridSpec
現在接受一個 figure
關鍵字。這是向後相容的,不提供此關鍵字只會導致 constrained_layout
不會對此 GridSpec
實例所組織的子圖進行操作。使用 GridSpec
的常式 (例如 fig.subplots
) 已被修改為將 figure 傳遞給 GridSpec
。
x 軸標籤和 y 軸標籤現在可以自動對齊#
如果刻度標籤的寬度差異很大,子圖的 ylabels
可能會在水平方向上錯位。如果刻度標籤在一個子圖上旋轉(例如),xlabels
也會發生同樣的情況。Figure
類別上的新方法:Figure.align_xlabels
和 Figure.align_ylabels
現在將水平或垂直對齊這些標籤。如果使用者只想對齊某些軸,則可以傳遞軸列表。如果未傳遞列表,則該演算法會查看圖形上的所有標籤。
只有具有相同子圖位置的標籤才會對齊。也就是說,只有當子圖位於子圖佈局的同一列時,才會對齊 y 軸標籤。
在呼叫這些方法之後,對齊是持續且自動的。
便利的包裝函式 Figure.align_labels
會同時呼叫這兩個函式。

軸圖例現在包含在 tight_bbox 中#
透過 ax.legend
建立的圖例有時可能會超出軸的限制。諸如 fig.tight_layout()
和 fig.savefig(bbox_inches='tight')
等工具會剪裁這些圖例。已進行更改以將它們包含在 tight
計算中。
Cividis 色彩對應表#
新增了一個名為 'cividis' 的新深藍色/黃色色彩對應表。與 viridis 一樣,cividis 在感知上是均勻的,並且對色盲人士是友善的。但是,cividis 更進一步:它不僅可以讓色盲使用者使用,而且實際上對於色盲和非色盲使用者來說看起來應該完全相同。有關更多詳細資訊,請參閱 Nuñez J, Anderton C, and Renslow R: "Optimizing colormaps with consideration for color vision deficiency to enable accurate interpretation of scientific data"。

新的色盲友善色彩循環樣式#
已新增一個新的色彩循環樣式定義 tableau-colorblind10,以提供另一個色盲友善圖表的選項。可以在樣式表的參考中找到此新樣式的示範。若要載入此色彩循環以取代預設的色彩循環
import matplotlib.pyplot as plt
plt.style.use('tableau-colorblind10')
支援 numpy.datetime64#
Matplotlib 長期以來在 matplotlib.dates
中支援 datetime.datetime
日期。我們現在也支援 numpy.datetime64
日期。任何可以使用 datetime.datetime
的地方,都可以使用 numpy.datetime64
。例如
time = np.arange('2005-02-01', '2005-02-02', dtype='datetime64[h]')
plt.plot(time)
使用 Pillow 寫入動畫#
現在可以使用 Pillow 作為動畫寫入器。目前支援的輸出格式為 gif (Pillow>=3.4) 和 webp (Pillow>=5.0)。例如使用方法如下
from __future__ import division
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter
fig, ax = plt.subplots()
line, = plt.plot([0, 1])
def animate(i):
line.set_ydata([0, i / 20])
return [line]
anim = FuncAnimation(fig, animate, 20, blit=True)
anim.save("movie.gif", writer=PillowWriter(fps=24))
plt.show()
滑桿 UI 小工具可以貼齊離散值#
滑桿 UI 小工具可以採用選擇性引數 valstep。這樣做會強制滑桿僅採用離散值,從 valmin 開始,並以 valstep 的大小遞增計數到 valmax。
如果 closedmax==True,則滑桿也會貼齊 valmax。
已將 capstyle
和 joinstyle
屬性新增至 Collection
#
Collection
類別現在具有可自訂的 capstyle
和 joinstyle
屬性。這允許使用者例如設定誤差線的 capstyle
。
將 pad kwarg 新增至 ax.set_title#
方法 Axes.set_title
現在具有 pad kwarg,其指定從軸頂部到繪製標題位置的距離。pad 的單位為點,預設值是 (已經存在的) rcParams["axes.titlepad"]
的值 (預設值:6.0
)。
Matplotlib 中 2 種色彩的比較#
由於 Matplotlib 中的色彩可以用多種方式指定,因此新增了 matplotlib.colors.same_color
方法,該方法會檢查兩種 colors
是否相同。
極座標圖的自動縮放會貼齊原點#
如果自動限制接近零,則在極座標圖中自動設定限制現在會將徑向限制貼齊零。這表示從零開始繪圖不會自動縮放以包含徑向軸上的小負值。
仍然可以使用 set_ylim
以通常的方式手動設定限制。
PathLike 支援#
在 Python 3.6+ 上,savefig
、imsave
、imread
和動畫寫入器現在接受 os.PathLike
作為輸入。
Axes.tick_params
可以設定格線屬性#
Tick
物件保留格線以及刻度標記及其標籤。Axis.set_tick_params
、Axes.tick_params
和 pyplot.tick_params
現在具有關鍵字引數 'grid_color'、'grid_alpha'、'grid_linewidth' 和 'grid_linestyle',用於覆寫 rcParams
中的預設值:'grid.color' 等。
Axes.imshow
將 RGB 值剪裁到有效範圍#
當 Axes.imshow
接收超出範圍的 RGB 或 RGBA 值時,現在會記錄警告並將它們裁剪到有效範圍。舊的行為會將數值包回範圍內,這經常隱藏離群值並使 RGB 圖像的解讀變得不可靠。
matplotlibrc
中用於放置 xaxis 和 yaxis 刻度標籤的屬性#
在 matplotlibrc
中引入四個新的布林屬性,用於 xaxis 和 yaxis 刻度標籤的預設位置,分別是 rcParams["xtick.labeltop"]
(預設值:False
)、rcParams["xtick.labelbottom"]
(預設值:True
)、rcParams["ytick.labelright"]
(預設值:False
) 和 rcParams["ytick.labelleft"]
(預設值:True
)。這些屬性也可以在 rcParams 中更改。
用於 gtk3 的 PGI 綁定#
GTK3 後端現在可以使用 PGI 而不是 PyGObject。PGI 是一個相當不完整的 GObject 綁定,因此不建議使用;它的主要優點是在 Travis 上可用(因此允許對 gtk3agg 和 gtk3cairo 後端進行 CI 測試)。
綁定選擇規則如下:- 如果 gi
已經被導入,則使用它;否則 - 如果 pgi
已經被導入,則使用它;否則 - 如果可以導入 gi
,則使用它;否則 - 如果可以導入 pgi
,則使用它;否則 - 拋出錯誤。
因此,要在安裝了兩個綁定的情況下強制使用 PGI,請先導入它。
用於 Qt、WX 和 Tk 畫布的 Cairo 渲染#
新的 Qt4Cairo
、Qt5Cairo
、WXCairo
和 TkCairo
後端允許 Qt、Wx 和 Tk 畫布使用 Cairo 渲染,而不是 Agg。
在新 ToolManager 中增加了對 QT 的支持#
現在可以將 ToolManager 與 Qt5 一起使用,例如
import matplotlib
matplotlib.use('QT5AGG')
matplotlib.rcParams['toolbar'] = 'toolmanager'
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.show()
目前將新的 Tool 類視為實驗性的,API 可能會更改,也許 rcParam 也會更改
主要範例 工具管理器 顯示了更多細節,只需調整標頭以使用 QT 而不是 GTK3
TkAgg 後端經過重新設計以支援 PyPy#
PyPy 現在可以使用 TkAgg 後端進行繪圖,支援 PyPy 5.9 及更高版本(適用於 python 2.7 的 PyPy 和適用於 python 3.5 的 PyPy)。
Python 日誌記錄庫用於除錯輸出#
Matplotlib 過去(偶爾)使用內部詳細輸出報告器。此版本將這些呼叫轉換為使用標準 Python logging
庫。
不再支援舊的 rcParams
verbose.level
和 verbose.fileo
。
仍然接受命令列選項 --verbose-helpful
和 --verbose-debug
,但已棄用。它們現在等同於設定 logging.INFO
和 logging.DEBUG
。
記錄器的根名稱為 matplotlib
,可以從程式中以以下方式存取
import logging
mlog = logging.getLogger('matplotlib')
改進的 repr
for Transform
s#
Transform
現在以更容易閱讀的方式縮排其 repr
。
In [1]: l, = plt.plot([]); l.get_transform()
Out[1]:
CompositeGenericTransform(
TransformWrapper(
BlendedAffine2D(
IdentityTransform(),
IdentityTransform())),
CompositeGenericTransform(
BboxTransformFrom(
TransformedBbox(
Bbox(x0=-0.05500000000000001, y0=-0.05500000000000001, x1=0.05500000000000001, y1=0.05500000000000001),
TransformWrapper(
BlendedAffine2D(
IdentityTransform(),
IdentityTransform())))),
BboxTransformTo(
TransformedBbox(
Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
BboxTransformTo(
TransformedBbox(
Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
Affine2D(
[[ 100. 0. 0.]
[ 0. 100. 0.]
[ 0. 0. 1.]])))))))