Matplotlib2.2版本中的兩個重要變化

Matplotlib2.2版本中的兩個重要變化

來自專欄 Matplotlib使用經驗

以下內容從

Constrained Layout Guide?

matplotlib.org圖標

中節選翻譯。具體細節請參考上面的鏈接。

從3.0版本開始,matplotlib將放棄對python2系列的支持,因此可以預見未來這些數值計算的庫都將全面遷移至python3系列。

在2.2版本中,matplotlib增強了子圖繪製的功能,引入constrained_layout,使得子圖之間的距離更加合理。同時提供了GridSpec,可以更加方便合理地劃分出不同子圖的區間。

constrained_layout

在默認設置中,由於字體大小,畫幅大小等一系列的原因,會導致默認生成的圖片出現如下的一些問題。比方字體超出圖片邊界,或者子圖刻度互相踩踏的問題。

目前的2.2版本,採取了一種更加便利自動化的方式解決這個問題,就是在畫圖的時候加入

constrained_layout這個參數。程序將自動計算合適的排列。即只需要加入下面這一行代碼實現。

fig, axs = plt.subplots(2, 2, constrained_layout=False)

這樣我們會看到,圖片中的文字排列將更為合理。

GridSpec

為了區分圖片上不同子圖排列,在2.2中引入了GridSpec,利用它可以任意劃分圖片的區域。

如下面的代碼和例子。

def example_plot(ax, fontsize=12, nodec=False): ax.plot([1, 2]) ax.locator_params(nbins=3) if not nodec: ax.set_xlabel(x-label, fontsize=fontsize) ax.set_ylabel(y-label, fontsize=fontsize) ax.set_title(Title, fontsize=fontsize) else: ax.set_xticklabels() ax.set_yticklabels()fig = plt.figure(constrained_layout=True)gs1 = gridspec.GridSpec(2, 1, figure=fig)ax1 = fig.add_subplot(gs1[0])ax2 = fig.add_subplot(gs1[1])example_plot(ax1)example_plot(ax2)

fig = plt.figure(constrained_layout=True)gs0 = gridspec.GridSpec(1, 2, figure=fig)gs1 = gridspec.GridSpecFromSubplotSpec(2, 1, gs0[0])ax1 = fig.add_subplot(gs1[0])ax2 = fig.add_subplot(gs1[1])example_plot(ax1)example_plot(ax2)gs2 = gridspec.GridSpecFromSubplotSpec(3, 1, gs0[1])for ss in gs2: ax = fig.add_subplot(ss) example_plot(ax) ax.set_title("") ax.set_xlabel("")ax.set_xlabel("x-label", fontsize=12)


推薦閱讀:

編程大佬不會寫tokenizer是不是一件很值得驕傲的事情?
為什麼最近好多人在學Python?
[23] Python模塊和引入
跟黃哥學Python習題:求字元串是不是由唯一字元組成。

TAG:科技 | Python | Matplotlib |