Matplotlib 3.0 可視化工具強勢來襲!

機器學習算法與Python學習2018-10-04 18:01:48

李林 編譯整理
量子位 出品 | 公眾號 QbitAI

Matplotlib 3.0來了!新版Matplotlib已能通過PyPI安裝了,不過,這一版本只支持python 3,Python 2死忠還得繼續用2.2.x版本。

作為最熱門的Python 2D繪圖工具之一,你看到的論文、教程裏,有不少插圖出自它手。

3.0版總共有16項變化:

改進了默認後端選擇

現在,內置後端在運行時按順序嘗試,直到導入了其中一個為止,不再要求默認後端必須作為構建過程的一部分來

無頭Linux服務器(由未定義的DISPLAY env來標識)不會選擇GUI後端。

新的循環調色板

添加了兩種新調色板:twilight和twilight_shifted。它們都以相同的顏色開始、結束,每個調色板的兩半是對稱的,亮度相同顏色不同。

因為是循環的,所以它們很適合用在相位角、羅盤方向、一天中的時間等循環數據來上。

能按固定的數量級縮放軸

想要實現這個功能,需要為scilimits參數Axes.ticklabel_format設置相同的非零上限和下限。

比如説,要把y軸縮放100萬倍(1e6),代碼是這樣的:

ax.ticklabel_format(style='sci', scilimits=(66), axis='y')

scilimits=(0, 0)的行為還和原來一樣,Matplotlib會根據軸上的數值來調整數量級,不讓它保持固定。以前,設置scilimits=(m, m)和設置scilimits=(0, 0)是一樣的。

為mpl_toolkits新增AnchoredDirectionArrows

AnchoredDirectionArrows是一個新增的mpl_toolkits類,它能繪製一對正交箭頭,在2D圖表上指示方向。

有幾個可選參數能改變佈局,比如旋轉箭頭、改變顏色等等,箭頭的頭尾兩部分長度、位置、寬度都能調整。

彩條能準確顯示

新增了colorbar.Colobar.minorticks_on()方法(method),用來正確顯示彩條上的次要刻度標記;與之相對的colorbar.Colobar.minorticks_off(),可以移除次要刻度。

自動處理顏色條上的標記

以前,在大號彩條上加了標記(比如次要刻度線)之後,縮小彩條,標記就看起來很恐怖。

現在,標記的數量可以隨着彩條大小響應式變化了。

不再自動給重名文件改名

以前,用GUI的保存對話框來保存圖表文件時,如果它和磁盤上已有文件重名,Matplotlib會自動加個後綴。

現在,遇到重名的情況,Matplotlib會提示用户,詢問是否覆蓋。

可以設置字號了

現在,可以通過title_fontsize這個kwarg來設置Figure.legend和Axes.legend的字號了,還新增了一個rcParams["legend.title_fontsize"]

二者的默認值都是None,也就是説圖例標題和的默認字號是相同的。

注意:是圖例標題,不是圖例本身。

rcParams支持用markevery設置axes.prop_cycle屬性

Matplotlib裏的rcParams設置對象,現在支持通過用markevery Line2D對象property的循環器來配置axes.prop_cycle屬性(attribute)。

pgf後端支持多頁PDF

from matplotlib.backends.backend_pgf import PdfPages
import matplotlib.pyplot as plt

with PdfPages('multipage.pdf'as pdf:
    # page 1
    plt.plot([213])
    pdf.savefig()

    # page 2
    plt.cla()
    plt.plot([312])
    pdf.savefig()

默認餅圖終於圓了

這是一個重大進步。(正經臉.jpg)

以前,Matplotlib的一大槽點就是餅圖都是蛋形的。如果你還想調回原來的默認蛋型餅圖,可以用ax.set_aspect("auto")或者plt.axis("auto")把縱橫軸的比設為自動。

新增SubplotBase.get_gridspec

通過這種新方法,用户可以輕鬆獲取gridspec。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(32)
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()

軸標題不會再與x軸重疊了

以前,如果軸標題與x軸重疊,需要手動調整。

現在,如果x軸在頂部,軸標題會自動移到它上方。用户想手動調整標題位置依然可以,不過有個小問題:不能放在默認的位置,放了系統就會自動移開。如果非要放,可以選一個接近的數字。比如説,ax.title.set_position(0.5, 1.0)就會被自動移開,改成ax.title.set_position(0.5, 1.01)就可以了。

GridSpec有了新便捷方法

現在,gridspec.GridSpecgridspec.GridSpecFromSubplotSpec都有了便捷新方法,可以分別用Figure.add_gridspecSubplotSpec.subgridspec替代。

import matplotlib.pyplot as plt

fig = plt.figure()
gs0 = fig.add_gridspec(31)
ax1 = fig.add_subplot(gs0[0])
ax2 = fig.add_subplot(gs0[1])
gssub = gs0[2].subgridspec(13)
for i in range(3):
    fig.add_subplot(gssub[0, i])

Figure有了add_artist方法

Figure類新增了add_artist方法,可以直接用artist和figure相加。例如:

circ = plt.Circle((.7.5), .05)
fig.add_artist(circ)

:math:指令重命名為:mathmpl:

matplotlib.sphinxext.mathmpl提供的第:math:個角色已經重命名為:mathmpl:,避免了和Sphinx 1.9默認提供的:math:衝突。

當使用1.8以下版本的Sphinx,:math::mathmpl:都能反向兼容。

傳送門

安裝Matplotlib和依賴項,用這兩行代碼:

python -mpip install -U pip
python -mpip install -U matplotlib


推薦一本python可視化工具的書籍
如下

想了解更多詳情,走這個傳送門:

https://matplotlib.org/index.html

閲讀原文

TAGS: