Matplotlib 快速指南



Matplotlib - 簡介

Matplotlib 是最流行的用於資料視覺化的 Python 包之一。它是一個跨平臺庫,用於根據陣列中的資料繪製二維圖。Matplotlib是用Python編寫的,並利用NumPy(Python的數值數學擴充套件)。它提供了一個面向物件的API,有助於使用Python GUI工具包(如PyQt、WxPython或Tkinter)將繪圖嵌入應用程式中。它也可以在Python和IPython shell、Jupyter notebook和web應用程式伺服器中使用。

Matplotlib 有一個名為 Pylab 的過程化介面,其設計類似於 MATLAB(MathWorks開發的一種專有程式語言)。Matplotlib 與 NumPy 可以被認為是 MATLAB 的開源等效項。

Matplotlib 最初由 John D. Hunter 於 2003 年編寫。當前穩定版本為 2.2.0,於 2018 年 1 月釋出。

Matplotlib - 環境搭建

Matplotlib 及其依賴包以 wheel 包的形式存在於標準 Python 包儲存庫中,可以使用 pip 包管理器安裝在 Windows、Linux 和 macOS 系統上。

pip3 install matplotlib

如果未為所有使用者安裝 Python 2.7 或 3.4 版本,則需要安裝 Microsoft Visual C++ 2008(Python 2.7 的 64 位或 32 位)或 Microsoft Visual C++ 2010(Python 3.4 的 64 位或 32 位)可再發行包。

如果您在 Mac 上使用 Python 2.7,請執行以下命令:

xcode-select –install

執行上述命令後,可能會編譯 subprocess32(一個依賴項)。

在極其舊版本的 Linux 和 Python 2.7 上,您可能需要安裝 subprocess32 的主版本。

Matplotlib 需要大量依賴項:

  • Python (>= 2.7 或 >= 3.4)
  • NumPy
  • setuptools
  • dateutil
  • pyparsing
  • libpng
  • pytz
  • FreeType
  • cycler
  • six

可選地,您還可以安裝許多包以啟用更好的使用者介面工具包。

  • tk
  • PyQt4
  • PyQt5
  • pygtk
  • wxpython
  • pycairo
  • Tornado

為了更好地支援動畫輸出格式和影像檔案格式、LaTeX 等,您可以安裝以下內容:

  • _mpeg/avconv
  • ImageMagick
  • Pillow (>=2.0)
  • LaTeX 和 GhostScript(用於使用 LaTeX 渲染文字)。
  • LaTeX 和 GhostScript(用於使用 LaTeX 渲染文字)。

Matplotlib - Anaconda 發行版

Anaconda 是一個免費的開源 Python 和 R 程式語言發行版,用於大規模資料處理、預測分析和科學計算。該發行版使包管理和部署變得簡單易用。Matplotlib 和許多其他有用的(資料)科學工具都是該發行版的一部分。包版本由包管理系統 Conda 管理。Anaconda 的優勢在於您可以訪問 720 多個包,這些包可以使用 Anaconda 的 Conda(一個包、依賴項和環境管理器)輕鬆安裝。

Anaconda 發行版可從 https://www.anaconda.com/download/. 下載安裝。對於 Windows 安裝,提供 32 位和 64 位二進位制檔案:

https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86.exe

https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86_64.exe

安裝是一個相當簡單的基於嚮導的過程。您可以在將 Anaconda 新增到 PATH 變數和將 Anaconda 註冊為您的預設 Python 之間進行選擇。

對於 Linux 安裝,請從下載頁面下載 32 位和 64 位安裝程式:

https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86.sh

https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh

現在,從 Linux 終端執行以下命令:

$ bash Anaconda3-5.0.1-Linux-x86_64.sh

Canopy 和 ActiveState 是 Windows、macOS 和常用 Linux 平臺最受歡迎的選擇。Windows 使用者可以在 WinPython 中找到一個選項。

Matplotlib - Jupyter Notebook

Jupyter 是一個寬鬆的首字母縮寫詞,代表 Julia、Python 和 R。這些程式語言是 Jupyter 應用程式的最初目標語言,但如今,notebook 技術也支援許多其他語言。

2001 年,Fernando Pérez 開始開發 Ipython。IPython 是一個用於多種程式語言互動式計算的命令列 shell,最初是為 Python 開發的。

考慮 IPython 提供的以下功能:

  • 互動式 shell(基於終端和 Qt)。

  • 支援程式碼、文字、數學表示式、內聯繪圖和其他媒體的基於瀏覽器的 notebook。

  • 支援互動式資料視覺化和 GUI 工具包的使用。

  • 靈活的、可嵌入的直譯器,可以載入到自己的專案中。

2014 年,Fernando Pérez 宣佈了一個從 IPython 分拆出來的專案,稱為 Jupyter 專案。IPython 將繼續作為 Python shell 和 Jupyter 的核心存在,而 IPython 的 notebook 和其他與語言無關的部分將遷移到 Jupyter 名稱下。Jupyter 添加了對 Julia、R、Haskell 和 Ruby 的支援。

要啟動 Jupyter notebook,請開啟 Anaconda Navigator(Anaconda 中包含的一個桌面圖形使用者介面,允許您啟動應用程式並輕鬆管理 Conda 包、環境和通道,而無需使用命令列命令)。

Anaconda Navigator

Navigator 顯示發行版中安裝的元件。

Anaconda Navigator Root

從 Navigator 啟動 Jupyter Notebook:

Jupyter Notebook

您將看到應用程式在以下地址的 Web 瀏覽器中開啟:https://:8888。

Command Prompt

您可能想先建立一個新的 notebook。您可以透過單擊“檔案”選項卡中的“新建”按鈕輕鬆完成此操作。您會看到您可以建立一個常規文字檔案、一個資料夾和一個終端。最後,您還將看到建立 Python 3 notebook 的選項。

Python 3 Notebook

Matplotlib - Pyplot API

一個新的未命名 notebook,副檔名為 .ipynb(代表 IPython notebook),顯示在瀏覽器的新選項卡中。

Pyplot API

matplotlib.pyplot 是一個命令式函式集合,使 Matplotlib 的工作方式類似於 MATLAB。每個 Pyplot 函式都會對圖形進行一些更改。例如,一個函式建立一個圖形,圖形中的一個繪圖區域,在繪圖區域中繪製一些線,用標籤裝飾繪圖等等。

繪圖型別

序號 函式和描述
1

Bar

建立條形圖。

2

Barh

建立水平條形圖。

3

Boxplot

建立箱線圖。

4

直方圖

繪製直方圖。

5

二維直方圖

建立二維直方圖。

6

餅圖

繪製餅圖。

7

線圖

在座標系上繪製線條和/或標記。

8

極座標圖

創建極座標圖。

9

散點圖

建立x軸與y軸的散點圖。

10

堆疊圖

繪製堆疊區域圖。

11

莖葉圖

建立莖葉圖。

12

階梯圖

建立階梯圖。

13

向量圖

繪製二維箭頭場。

影像函式

序號 函式和描述
1

讀取影像

將影像檔案讀取到陣列中。

2

儲存影像

將陣列儲存為影像檔案。

3

顯示影像

在座標系上顯示影像。

座標系函式

序號 函式和描述
1

座標系

向圖形新增座標系。

2

文字

向座標系新增文字。

3

標題

設定當前座標系的標題。

4

X軸標籤

設定當前座標系的x軸標籤。

5

X軸範圍

獲取或設定當前座標系的x軸範圍。

6

X軸刻度

.

7

X軸刻度

獲取或設定當前刻度位置和標籤的x軸範圍。

8

Y軸標籤

設定當前座標系的y軸標籤。

9

Y軸範圍

獲取或設定當前座標系的y軸範圍。

10

Y軸刻度

設定y軸的縮放比例。

11

Y軸刻度

獲取或設定當前刻度位置和標籤的y軸範圍。

圖形函式

序號 函式和描述
1

圖形文字

向圖形新增文字。

2

圖形

建立一個新的圖形。

3

顯示

顯示圖形。

4

儲存圖形

儲存當前圖形。

5

關閉

關閉圖形視窗。

Matplotlib - 簡單繪圖

本章將學習如何使用Matplotlib建立簡單的繪圖。

現在我們將使用Matplotlib顯示一個簡單的線圖,顯示弧度角與其正弦值的關係。首先,按照慣例,我們將Matplotlib包中的Pyplot模組匯入,並使用別名plt。

import matplotlib.pyplot as plt

接下來,我們需要一個用於繪圖的數字陣列。NumPy庫中定義了各種陣列函式,我們使用別名np匯入該庫。

import numpy as np

現在,我們使用NumPy庫中的arange()函式獲取0到2π之間角度的ndarray物件。

x = np.arange(0, math.pi*2, 0.05)

ndarray物件作為圖形的x軸值。透過以下語句獲得x中角度對應的正弦值,這些值將顯示在y軸上:

y = np.sin(x)

使用plot()函式繪製來自兩個陣列的值。

plt.plot(x,y)

您可以設定繪圖示題以及x軸和y軸的標籤。

You can set the plot title, and labels for x and y axes.
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')

show()函式呼叫繪圖檢視器視窗:

plt.show()

完整的程式如下:

from matplotlib import pyplot as plt
import numpy as np
import math #needed for definition of pi
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
plt.show()

執行以上程式碼行後,將顯示以下圖形:

Simple Plot

現在,使用帶有Matplotlib的Jupyter Notebook。

如前所述,從Anaconda Navigator或命令列啟動Jupyter Notebook。在輸入單元格中,輸入Pyplot和NumPy的匯入語句:

from matplotlib import pyplot as plt
import numpy as np

為了在Notebook本身(而不是單獨的檢視器)中顯示繪圖輸出,請輸入以下魔法命令:

%matplotlib inline

獲取包含0到2π之間弧度角的ndarray物件x,以及每個角度的正弦值y:

import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)

設定x軸和y軸的標籤以及繪圖示題:

plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')

最後,執行plot()函式以在Notebook中生成正弦波顯示(無需執行show()函式):

plt.plot(x,y)

執行最後一行程式碼後,將顯示以下輸出:

Final Line of Code

Matplotlib - PyLab 模組

PyLab是Matplotlib面向物件繪相簿的過程介面。Matplotlib是整個包;matplotlib.pyplot是Matplotlib中的一個模組;PyLab是一個與Matplotlib一起安裝的模組。

PyLab是一個便利的模組,它在一個名稱空間中批次匯入matplotlib.pyplot(用於繪圖)和NumPy(用於數學和陣列操作)。儘管許多示例使用PyLab,但現在已不再推薦。

基本繪圖

使用plot命令繪製曲線。它接受一對長度相同的陣列(或序列):

from numpy import *
from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y)
show()

以上程式碼行生成以下輸出:

Basic Plotting

要繪製符號而不是線條,請提供額外的字串引數。

符號 - , –, -., , . , , , o , ^ , v , < , > , s , + , x , D , d , 1 , 2 , 3 , 4 , h , H , p , | , _
顏色 b, g, r, c, m, y, k, w

現在,考慮執行以下程式碼:

from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y, 'r.')
show()

它繪製如下所示的紅色點:

Additional String Argument

可以疊加繪圖。只需使用多個繪圖命令。使用clf()清除繪圖。

from pylab import *
plot(x, sin(x))
plot(x, cos(x), 'r-')
plot(x, -sin(x), 'g--')
show()

以上程式碼行生成以下輸出:

Multiple Plot Commands

Matplotlib - 面向物件介面

雖然使用**matplotlib.pyplot**模組可以快速生成繪圖,但建議使用面向物件的方法,因為它可以更好地控制和自定義繪圖。大多數函式也可以在**matplotlib.axes.Axes**類中找到。

使用更正式的面向物件方法的主要思想是建立圖形物件,然後只調用該物件的方 法或屬性。這種方法在處理具有多個繪圖的畫布時更有幫助。

在面向物件介面中,Pyplot僅用於少數幾個函式,例如圖形建立,使用者顯式建立並跟蹤圖形和座標系物件。在此級別,使用者使用Pyplot建立圖形,並透過這些圖形建立 一個或多個座標系物件。然後,這些座標系物件用於大多數繪圖操作。

首先,我們建立一個圖形例項,它提供一個空畫布。

fig = plt.figure()

現在向圖形新增座標系。**add_axes()**方法需要一個包含4個元素的列表物件,分別對應圖形的左、下、寬和高。每個數字必須在0到1之間:

ax=fig.add_axes([0,0,1,1])

設定x軸和y軸的標籤以及標題:

ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')

呼叫座標系物件的plot()方法。

ax.plot(x,y)

如果您使用的是Jupyter Notebook,則必須發出%matplotlib inline指令;否則,pyplot模組的show()函式將顯示繪圖。

考慮執行以下程式碼:

from matplotlib import pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.plot(x,y)
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
plt.show()

輸出

以上程式碼行生成以下輸出:

Add Axes Method

在Jupyter Notebook中執行相同的程式碼將顯示如下輸出:

Jupyter Notebook Output

Matplotlib - Figure 類

**matplotlib.figure**模組包含Figure類。它是所有繪圖元素的頂級容器。透過呼叫pyplot模組中的**figure()**函式來例項化Figure物件:

fig = plt.figure()

下表顯示了其他引數:

圖形大小 以英寸為單位的(寬度,高度)元組
每英寸點數 每英寸點數
填充顏色 圖形面片填充顏色
邊框顏色 圖形面片邊框顏色
線寬 邊框線寬

Matplotlib - Axes 類

座標系物件是具有資料空間的影像區域。給定的圖形可以包含多個座標系,但給定的座標系物件只能在一個圖形中。座標系包含兩個(在3D情況下為三個)軸物件。Axes類及其成員函式是使用OO介面的主要入口點。

透過呼叫add_axes()方法將座標系物件新增到圖形中。它返回座標系物件並在位置rect [left, bottom, width, height]新增一個座標系,其中所有數量都是圖形寬度和高度的分數。

引數

以下是Axes類的引數:

  • rect - 一個包含[left, bottom, width, height]數量的4長度序列。

ax=fig.add_axes([0,0,1,1])

Axes類的以下成員函式向繪圖新增不同的元素:

圖例

Axes類的**legend()**方法向繪圖圖形新增圖例。它有三個引數:

ax.legend(handles, labels, loc)

其中labels是字串序列,handles是Line2D或Patch例項序列。loc可以是指定圖例位置的字串或整數。

位置字串 位置程式碼
最佳 0
右上方 1
左上方 2
左下方 3
右下方 4
右側 5
左中部 6
右中部 7
下中部 8
上中部 9
中心 10

axes.plot()

這是Axes類的基本方法,它將一個數組的值相對於另一個數組的值繪製為線條或標記。plot()方法可以有一個可選的格式字串引數,用於指定線條和標記的顏色、樣式和大小。

顏色程式碼

字元 顏色
‘b’ 藍色
‘g’ 綠色
‘r’ 紅色
‘b’ 藍色
‘c’ 青色
‘m’ 品紅色
‘y’ 黃色
‘k’ 黑色
‘b’ 藍色
‘w’ 白色

標記程式碼

字元 描述
‘.’ 點標記
‘o’ 圓形標記
‘x’ X標記
‘D’ 菱形標記
‘H’ 六邊形標記
‘s’ 方形標記
‘+’ 加號標記

線型

字元 描述
‘-‘ 實線
‘—‘ 虛線
‘-.’ 點劃線
‘:’ 點線
‘H’ 六邊形標記

以下示例以線圖的形式顯示了電視和智慧手機的廣告支出和銷售額。表示電視的線是具有黃色和方形標記的實線,而智慧手機線是具有綠色和圓形標記的虛線。

import matplotlib.pyplot as plt
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
l1 = ax.plot(x1,y,'ys-') # solid line with yellow colour and square marker
l2 = ax.plot(x2,y,'go--') # dash line with green colour and circle marker
ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right') # legend placed at lower right
ax.set_title("Advertisement effect on sales")
ax.set_xlabel('medium')
ax.set_ylabel('sales')
plt.show()

執行以上程式碼行後,將生成以下繪圖:

Advertisement Effect

Matplotlib - 多圖

本章將學習如何在同一畫布上建立多個子圖。

**subplot()**函式返回給定網格位置上的座標系物件。此函式的呼叫簽名為:

plt.subplot(subplot(nrows, ncols, index)

在當前圖形中,該函式建立一個座標系物件,並將其返回到nrows乘以ncols座標系的索引位置。索引從1到nrows * ncols,按行優先順序遞增。如果nrows、ncols和index都小於10。索引也可以作為單個連線的三位數給出。

例如,subplot(2, 3, 3)和subplot(233)都在當前圖形的右上角建立一個座標系,佔據圖形高度的一半和圖形寬度的三分之一。

建立子圖將刪除與其重疊的任何預先存在的子圖(超出了共享邊界)。

import matplotlib.pyplot as plt
# plot a line, implicitly creating a subplot(111)
plt.plot([1,2,3])
# now create a subplot which represents the top plot of a grid with 2 rows and 1 column.
#Since this subplot will overlap the first, the plot (and its axes) previously 
created, will be removed
plt.subplot(211)
plt.plot(range(12))
plt.subplot(212, facecolor='y') # creates 2nd subplot with yellow background
plt.plot(range(12))

以上程式碼行生成以下輸出:

Multiplots

圖形類的add_subplot()函式不會覆蓋現有的繪圖:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot([1,2,3])
ax2 = fig.add_subplot(221, facecolor='y')
ax2.plot([1,2,3])

執行以上程式碼行後,將生成以下輸出:

Add Spot Function

您可以透過在同一圖形畫布中新增另一個座標系物件來新增插入繪圖。

import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
y = np.sin(x)
axes1.plot(x, y, 'b')
axes2.plot(x,np.cos(x),'r')
axes1.set_title('sine')
axes2.set_title("cosine")
plt.show()

執行以上程式碼行後,將生成以下輸出:

Insert Plot

Matplotlib - Subplots() 函式

Matplotlib的pyplot API有一個名為subplots()的便利函式,它充當實用程式包裝器,有助於在一個呼叫中建立子圖的常見佈局,包括封閉的圖形物件。

Plt.subplots(nrows, ncols)

此函式的兩個整數引數指定子圖網格的行數和列數。該函式返回一個圖形物件和一個包含等於nrows*ncols的座標系物件的元組。每個座標系物件都可以透過其索引訪問。這裡我們建立一個2行2列的子圖,並在每個子圖中顯示4個不同的繪圖。

import matplotlib.pyplot as plt
fig,a =  plt.subplots(2,2)
import numpy as np
x = np.arange(1,5)
a[0][0].plot(x,x*x)
a[0][0].set_title('square')
a[0][1].plot(x,np.sqrt(x))
a[0][1].set_title('square root')
a[1][0].plot(x,np.exp(x))
a[1][0].set_title('exp')
a[1][1].plot(x,np.log10(x))
a[1][1].set_title('log')
plt.show()

以上程式碼行生成以下輸出:

Subplots Function

Matplotlib - Subplot2grid() 函式

此函式在建立網格特定位置的座標系物件方面提供了更大的靈活性。它還允許座標系物件跨越多個行或列。

Plt.subplot2grid(shape, location, rowspan, colspan)

在以下示例中,圖形物件的3x3網格填充了不同大小的行和列跨度的座標系物件,每個物件顯示不同的繪圖。

import matplotlib.pyplot as plt
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
import numpy as np
x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()

執行以上程式碼行後,將生成以下輸出:

Subplot2grid Functions

Matplotlib - 網格

座標系物件的grid()函式將圖形內網格的可見性設定為開啟或關閉。您還可以顯示網格的主要/次要(或兩者)刻度。此外,可以在grid()函式中設定顏色、線型和線寬屬性。

import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1,3, figsize = (12,4))
x = np.arange(1,11)
axes[0].plot(x, x**3, 'g',lw=2)
axes[0].grid(True)
axes[0].set_title('default grid')
axes[1].plot(x, np.exp(x), 'r')
axes[1].grid(color='b', ls = '-.', lw = 0.25)
axes[1].set_title('custom grid')
axes[2].plot(x,x)
axes[2].set_title('no grid')
fig.tight_layout()
plt.show()
Grids

Matplotlib - 座標軸格式化

有時,一個或幾個資料點遠大於大部分資料。在這種情況下,座標軸的刻度需要設定為對數刻度而不是普通刻度。這就是對數刻度。在 Matplotlib 中,可以透過將 axes 物件的 xscale 或 vscale 屬性設定為 'log' 來實現。

有時還需要在座標軸數字和座標軸標籤之間顯示一些額外的距離。可以將任一座標軸(x 軸或 y 軸或兩者)的 labelpad 屬性設定為所需的值。

以下示例演示了上述兩種功能。右側的子圖具有對數刻度,左側的子圖的 x 軸標籤距離更遠。

import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1, 2, figsize=(10,4))
x = np.arange(1,5)
axes[0].plot( x, np.exp(x))
axes[0].plot(x,x**2)
axes[0].set_title("Normal scale")
axes[1].plot (x, np.exp(x))
axes[1].plot(x, x**2)
axes[1].set_yscale("log")
axes[1].set_title("Logarithmic scale (y)")
axes[0].set_xlabel("x axis")
axes[0].set_ylabel("y axis")
axes[0].xaxis.labelpad = 10
axes[1].set_xlabel("x axis")
axes[1].set_ylabel("y axis")
plt.show()
Formatting Axes

座標軸脊柱是連線座標軸刻度標記的線條,用於劃分繪圖區域的邊界。axes 物件在頂部、底部、左側和右側都有脊柱。

可以透過指定顏色和寬度來格式化每個脊柱。如果將任何邊的顏色設定為 none,則可以將其設定為不可見。

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.spines['bottom'].set_color('blue')
ax.spines['left'].set_color('red')
ax.spines['left'].set_linewidth(2)
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.plot([1,2,3,4,5])
plt.show()
Axis Spines

Matplotlib - 設定限制

Matplotlib 自動確定沿繪圖的 x、y(以及 3D 繪圖中的 z 軸)軸顯示的變數的最小值和最大值。但是,可以使用 **set_xlim()** 和 **set_ylim()** 函式顯式設定限制。

在下面的圖中,顯示了 x 軸和 y 軸的自動縮放限制。

import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x))
a1.set_title('exp')
plt.show()
Setting Limits

現在我們將 x 軸的限制格式化為 (0 到 10),y 軸格式化為 (0 到 10000)。

import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x),'r')
a1.set_title('exp')
a1.set_ylim(0,10000)
a1.set_xlim(0,10)
plt.show()
Format The Limits

Matplotlib - 設定刻度和刻度標籤

刻度是表示座標軸上資料點的標記。到目前為止,在我們之前的所有示例中,Matplotlib 都自動承擔了在座標軸上設定點間距的任務。Matplotlib 的預設刻度定位器和格式化程式設計用於在許多常見情況下都能滿足需求。可以顯式提及刻度的位 置和標籤以滿足特定要求。

**xticks()** 和 **yticks()** 函式接受列表物件作為引數。列表中的元素表示將在相應座標軸上顯示刻度的 位置。

ax.set_xticks([2,4,6,8,10])

此方法將使用刻度標記給定位置的資料點。

同樣,可以透過 **set_xlabels()** 和 **set_ylabels()** 函式分別設定與刻度標記對應的標籤。

ax.set_xlabels([‘two’, ‘four’,’six’, ‘eight’, ‘ten’])

這將在 x 軸上的標記下方顯示文字標籤。

以下示例演示了刻度和標籤的使用。

import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
y = np.sin(x)
ax.plot(x, y)
ax.set_xlabel(‘angle’)
ax.set_title('sine')
ax.set_xticks([0,2,4,6])
ax.set_xticklabels(['zero','two','four','six'])
ax.set_yticks([-1,0,1])
plt.show()
Tick and Labels

Matplotlib - 雙座標軸

在一個圖形中使用雙 x 軸或 y 軸被認為是有用的。更重要的是,當繪製具有不同單位的曲線時。Matplotlib 使用 twinx 和 twiny 函式支援此功能。

在下面的示例中,該圖具有雙 y 軸,一個顯示 exp(x),另一個顯示 log(x)。

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
x = np.arange(1,11)
a1.plot(x,np.exp(x))
a1.set_ylabel('exp')
a2 = a1.twinx()
a2.plot(x, np.log(x),'ro-')
a2.set_ylabel('log')
fig.legend(labels = ('exp','log'),loc='upper left')
plt.show()
Twin Axes

Matplotlib - 條形圖

條形圖或條形圖是一種圖表或圖形,它使用矩形條來呈現分類資料,其高度或長度與它們所代表的值成比例。條形圖可以垂直或水平繪製。

條形圖顯示離散類別之間的比較。圖表的其中一個軸顯示要比較的特定類別,另一個軸表示測量值。

Matplotlib API 提供了 **bar()** 函式,該函式既可以在 MATLAB 風格中使用,也可以在面向物件的 API 中使用。與 axes 物件一起使用的 bar() 函式的簽名如下:

ax.bar(x, height, width, bottom, align)

該函式建立一個條形圖,其邊界矩形的尺寸為 (x −width = 2; x + width=2; bottom; bottom + height)。

函式的引數為:

x 表示條形 x 座標的標量序列。align 控制 x 是條形中心(預設值)還是左邊緣。
height 標量或標量序列,表示條形的高度。
width 標量或類陣列,可選。條形的寬度,預設為 0.8。
bottom 標量或類陣列,可選。條形的 y 座標,預設為 None。
align {'center', 'edge'},可選,預設為 'center'

該函式返回一個包含所有條形的 Matplotlib 容器物件。

以下是 Matplotlib 條形圖的一個簡單示例。它顯示了在某個學院開設的各種課程中註冊的學生人數。

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()
Matplotlib Bar Plot

在比較多個數量並在更改一個變數時,我們可能需要一個條形圖,其中一個數量值使用一種顏色的條形。

我們可以透過調整條形的厚度和位置來繪製多個條形圖。data 變數包含三個包含四個值的序列。下面的指令碼將顯示四個條形的三個條形圖。條形的厚度將為 0.25 個單位。每個條形圖將從前一個條形圖偏移 0.25 個單位。data 物件是一個多字典,包含工程學院三個分院在過去四年中透過的學生人數。

import numpy as np
import matplotlib.pyplot as plt
data = [[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
X = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
Multiple Bar Charts

堆疊條形圖將表示不同組的條形堆疊在一起。生成的條形的高度顯示了組的組合結果。

**pyplot.bar()** 函式的可選 bottom 引數允許您為條形指定起始值。它不會從零執行到某個值,而是從底部執行到該值。對 pyplot.bar() 的第一次呼叫繪製藍色條形。對 pyplot.bar() 的第二次呼叫繪製紅色條形,藍色條形的底部位於紅色條形的頂部。

import numpy as np
import matplotlib.pyplot as plt
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
width = 0.35
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(ind, menMeans, width, color='r')
ax.bar(ind, womenMeans, width,bottom=menMeans, color='b')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
ax.set_yticks(np.arange(0, 81, 10))
ax.legend(labels=['Men', 'Women'])
plt.show()
Scores

Matplotlib - 直方圖

直方圖是數值資料分佈的精確表示。它是連續變數機率分佈的估計。它是一種條形圖。

要構建直方圖,請按照以下步驟操作:

  • **分箱**值的範圍。
  • 將值的整個範圍劃分為一系列區間。
  • 計算有多少值落入每個區間。

分箱通常指定為變數的連續的、不重疊的區間。

**matplotlib.pyplot.hist()** 函式繪製直方圖。它計算並繪製 x 的直方圖。

引數

下表列出了直方圖的引數:

x 陣列或陣列序列
bins 整數或序列或“auto”,可選
可選引數
range 分箱的下限和上限。
density 如果為 True,則返回元組的第一個元素將是歸一化為形成機率密度 的計數。
cumulative 如果為 True,則計算直方圖,其中每個分箱給出的計數為該分箱加上所有較小值的分箱的計數。
histtype 要繪製的直方圖型別。預設為“bar”。
  • “bar”是傳統的條形直方圖。如果給出多個數據,則條形並排排列。
  • “barstacked”是一種條形直方圖,其中多個數據堆疊在一起。
  • “step”生成預設情況下未填充的線圖。
  • “stepfilled”生成預設情況下已填充的線圖。

以下示例繪製了學生在課堂上獲得的分數的直方圖。定義了四個分箱:0-25、26-50、51-75 和 76-100。直方圖顯示落入此範圍內的學生人數。

from matplotlib import pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(a, bins = [0,25,50,75,100])
ax.set_title("histogram of result")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')
plt.show()

圖如下所示:

Histogram

Matplotlib - 餅圖

餅圖只能顯示一個數據系列。餅圖顯示一個數據系列中專案(稱為扇區)的大小,與專案的總和成比例。餅圖中的資料點顯示為整個餅圖的百分比。

Matplotlib API 有一個 **pie()** 函式,它生成一個表示陣列中資料的餅圖。每個扇區的面積分數由 **x/sum(x)** 給出。如果 sum(x)<1,則 x 的值直接給出面積分數,並且不會規範化陣列。生成的餅圖將有一個大小為 1 - sum(x) 的空扇區。

如果圖形和座標軸是正方形,或者座標軸縱橫比相等,則餅圖看起來最佳。

引數

下表列出了餅圖的引數:

x 類陣列。扇區大小。
labels 列表。提供每個扇區標籤的字串序列。
Colors matplotlibcolorargs 序列,餅圖將透過它迴圈。如果為 None,則將使用當前活動週期中的顏色。
Autopct 字串,用於使用其數值標記扇區。標籤將放在扇區內。格式字串將為 fmt%pct。

以下程式碼使用 pie() 函式顯示註冊各種計算機語言課程的學生列表的餅圖。在 **autopct** 引數的幫助下,比例百分比顯示在各個扇區內,該引數設定為 %1.2f%。

from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('equal')
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.pie(students, labels = langs,autopct='%1.2f%%')
plt.show()
Pie Chart

Matplotlib - 散點圖

散點圖用於在水平軸和垂直軸上繪製資料點,以試圖顯示一個變數受另一個變數影響的程度。資料表中的每一行都由一個標記表示,其位置取決於在 X 軸和 Y 軸上設定的列中的值。可以設定第三個變數以對應於標記的顏色或大小,從而為繪圖新增另一個維度。

下面的指令碼繪製了男生和女生成績範圍與成績的散點圖,並使用了兩種不同的顏色。

import matplotlib.pyplot as plt
girls_grades = [89, 90, 70, 89, 100, 80, 90, 100, 80, 34]
boys_grades = [30, 29, 49, 48, 100, 48, 38, 45, 20, 30]
grades_range = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
ax.scatter(grades_range, girls_grades, color='r')
ax.scatter(grades_range, boys_grades, color='b')
ax.set_xlabel('Grades Range')
ax.set_ylabel('Grades Scored')
ax.set_title('scatter plot')
plt.show()
Graded Scored

Matplotlib - 等高線圖

等高線圖(有時稱為等值線圖)是一種在二維平面上顯示三維表面的方法。它在 y 軸上繪製兩個預測變數 X Y,並在等高線中繪製響應變數 Z。這些等高線有時稱為 z 切片或等響應值。

如果您想檢視值 Z 如何作為兩個輸入 X 和 Y 的函式而變化,則等高線圖是合適的,這樣 Z = f(X,Y)。兩個變數函式的等高線或等值線是函式具有恆定值的曲線。

自變數 x 和 y 通常限制在稱為網格的規則網格中。numpy.meshgrid 根據 x 值陣列和 y 值陣列建立一個矩形網格。

Matplotlib API 包含 `contour()` 和 `contourf()` 函式,分別用於繪製等高線和填充等高線。這兩個函式都需要三個引數 x、y 和 z。

import numpy as np
import matplotlib.pyplot as plt
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
fig,ax=plt.subplots(1,1)
cp = ax.contourf(X, Y, Z)
fig.colorbar(cp) # Add a colorbar to a plot
ax.set_title('Filled Contours Plot')
#ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
plt.show()
Filled Colours Plot

Matplotlib - 矢羽圖

箭羽圖(Quiver plot)以箭頭形式顯示速度向量,箭頭的分量為 (u,v),位置為 (x,y)。

quiver(x,y,u,v)

上述命令將向量繪製為箭頭,箭頭座標由 x 和 y 中對應元素的每一對指定。

引數

下表列出了箭羽圖的不同引數:

x x
一維或二維陣列,序列。箭頭的 x 座標。 y
一維或二維陣列,序列。箭頭的 y 座標。 u
一維或二維陣列,序列。箭頭向量的 x 分量。 v
一維或二維陣列,序列。箭頭向量的 y 分量。 c

一維或二維陣列,序列。箭頭的顏色。

import matplotlib.pyplot as plt
import numpy as np
x,y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25))
z = x*np.exp(-x**2 - y**2)
v, u = np.gradient(z, .2, .2)
fig, ax = plt.subplots()
q = ax.quiver(x,y,u,v)
plt.show()
Quicker Plot

Matplotlib - 箱線圖

下面的程式碼繪製了一個簡單的箭羽圖:

Box Plot

箱線圖(也稱為須狀圖)顯示一組資料的彙總資訊,包括最小值、第一四分位數、中位數、第三四分位數和最大值。在箱線圖中,我們從第一四分位數到第三四分位數畫一個箱子。一條垂直線穿過箱子,位於中位數處。須線從每個四分位數延伸到最小值或最大值。

np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)

讓我們建立箱線圖的資料。我們使用 `numpy.random.normal()` 函式建立模擬資料。它接受三個引數:正態分佈的均值、標準差和所需的值的數量。

fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the boxplot
bp = ax.boxplot(data_to_plot)
plt.show()

我們上面建立的陣列列表是建立箱線圖的唯一必需輸入。使用 `data_to_plot` 程式碼行,我們可以使用以下程式碼建立箱線圖:

Line of Code

Matplotlib - 小提琴圖

上述程式碼將生成以下輸出:

小提琴圖類似於箱線圖,但它們還顯示了不同值處資料的機率密度。這些圖包括資料中位數的標記和指示四分位數間距的箱子,就像標準箱線圖一樣。在此箱線圖上疊加了核密度估計。與箱線圖一樣,小提琴圖用於表示不同“類別”中變數分佈(或樣本分佈)的比較。

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)

## combine these different collections into a list
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]

# Create a figure instance
fig = plt.figure()

# Create an axes instance
ax = fig.add_axes([0,0,1,1])

# Create the boxplot
bp = ax.violinplot(data_to_plot)
plt.show()
Violin Plot

小提琴圖比普通的箱線圖提供更多資訊。事實上,箱線圖只顯示彙總統計資訊,例如均值/中位數和四分位數間距,而小提琴圖顯示資料的完整分佈。

Matplotlib - 三維繪圖

儘管 Matplotlib 最初只考慮二維繪圖,但在更高版本中,一些三維繪圖工具建立在 Matplotlib 的二維顯示之上,以提供一組用於三維資料視覺化的工具。透過匯入 Matplotlib 包中包含的 `mplot3d` 工具包來啟用三維繪圖。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)
ax.plot3D(x, y, z, 'gray')
ax.set_title('3D line plot')
plt.show()

可以透過向任何正常的座標軸建立例程傳遞關鍵字 `projection='3d'` 來建立一個三維座標軸。

Three-dimensional Plotting

現在我們可以繪製各種三維繪圖型別。最基本的三維繪圖是根據 (x, y, z) 三元組建立的**三維線圖**。這可以使用 `ax.plot3D` 函式建立。

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)
c = x + y
ax.scatter(x, y, z, c=c)
ax.set_title('3d Scatter plot')
plt.show()
3D Scatter Plot

**三維散點圖**是使用 `ax.scatter3D` 函式生成的。

Matplotlib - 三維等高線圖

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
   return np.sin(np.sqrt(x ** 2 + y ** 2))
	
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('3D contour')
plt.show()
3D Contour

`ax.contour3D()` 函式建立三維等高線圖。它要求所有輸入資料都採用二維規則網格的形式,Z 資料在每個點處進行評估。在這裡,我們將顯示三維正弦函式的三維等高線圖。

Matplotlib - 三維線框圖

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
   return np.sin(np.sqrt(x ** 2 + y ** 2))
	
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe')
plt.show()

我們上面建立的陣列列表是建立箱線圖的唯一必需輸入。使用 `data_to_plot` 程式碼行,我們可以使用以下程式碼建立箱線圖:

Wireframe

線框圖採用網格值並將其投影到指定的的三維曲面上,可以使生成的的三維形式更容易視覺化。`plot_wireframe()` 函式用於此目的:

Matplotlib - 三維曲面圖

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T # transpose
z = np.cos(x ** 2 + y ** 2)

fig = plt.figure()
ax = plt.axes(projection='3d')

ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
ax.set_title('Surface plot')
plt.show()

我們上面建立的陣列列表是建立箱線圖的唯一必需輸入。使用 `data_to_plot` 程式碼行,我們可以使用以下程式碼建立箱線圖:

Surface Plot

曲面圖顯示指定因變數 (Y) 與兩個自變數 (X 和 Z) 之間的函式關係。該圖是等高線圖的補充圖。曲面圖就像線框圖,但線框的每個面都是填充的多邊形。這有助於感知正在視覺化的表面的拓撲結構。`plot_surface()` 函式以 x、y 和 z 作為引數。

Matplotlib - 使用文字

Matplotlib 具有廣泛的文字支援,包括對數學表示式的支援、光柵和向量輸出的**TrueType** 支援、任意旋轉的換行符分隔文字以及 Unicode 支援。Matplotlib 包含它自己的 `matplotlib.font_manager`,它實現了一個跨平臺的、符合 W3C 標準的字型查詢演算法。

使用者可以對文字屬性(字型大小、字型粗細、文字位置和顏色等)進行大量控制。Matplotlib 實現大量的 TeX 數學符號和命令。

以下命令用於在 Pyplot 介面中建立文字: text
在 Axes 的任意位置新增文字。 annotate
在 Axes 的任意位置添加註釋,帶可選箭頭。 xlabel
向 Axes 的 x 軸新增標籤。 ylabel
向 Axes 的 y 軸新增標籤。 title
向 Axes 新增標題。 figtext
在 Figure 的任意位置新增文字。 suptitle

向 Figure 新增標題。

所有這些函式都建立並返回一個 `matplotlib.text.Text()` 例項。

import matplotlib.pyplot as plt
fig = plt.figure()

ax = fig.add_axes([0,0,1,1])

ax.set_title('axes title')
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.text(3, 8, 'boxed italics text in data coords', style='italic', 
bbox = {'facecolor': 'red'})
ax.text(2, 6, r'an equation: $E = mc^2$', fontsize = 15)
ax.text(4, 0.05, 'colored text in axes coords',
verticalalignment = 'bottom', color = 'green', fontsize = 15)
ax.plot([2], [1], 'o')
ax.annotate('annotate', xy = (2, 1), xytext = (3, 4),
arrowprops = dict(facecolor = 'black', shrink = 0.05))
ax.axis([0, 10, 0, 10])
plt.show()

我們上面建立的陣列列表是建立箱線圖的唯一必需輸入。使用 `data_to_plot` 程式碼行,我們可以使用以下程式碼建立箱線圖:

Working With Text

Matplotlib - 數學表示式

以下指令碼演示了上述一些函式的使用:

# math text
plt.title(r'$\alpha > \beta$')

您可以透過將子集 TeX 標記放在一對美元符號 ($) 之內,在任何 Matplotlib 文字字串中使用它。

r'$\alpha_i> \beta_i$'

import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)

plt.plot(t,s)
plt.title(r'$\alpha_i> \beta_i$', fontsize=20)

plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$', fontsize = 20)
plt.text(0.1, -0.5, r'$\sqrt{2}$', fontsize=10)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()

我們上面建立的陣列列表是建立箱線圖的唯一必需輸入。使用 `data_to_plot` 程式碼行,我們可以使用以下程式碼建立箱線圖:

Mathematical Expressions

要建立下標和上標,請使用 '_' 和 '^' 符號:

Matplotlib - 使用影像

Matplotlib 包中的影像模組提供載入、重新縮放和顯示影像所需的功能。

Pillow 庫支援載入影像資料。Matplotlib 本身只支援 PNG 影像。如果本機讀取失敗,以下顯示的命令將回退到 Pillow。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
img = mpimg.imread('mtplogo.png')

`imread()` 函式用於以 `float32` dtype 的 `ndarray` 物件讀取影像資料。本例中使用的影像為 PNG 檔案,但請記住您自己資料需要 Pillow 庫。

Matplotlib Image

假設以下名為 `mtplogo.png` 的影像存在於當前工作目錄中。

plt.imsave("logo.png", img, cmap = 'gray', origin = 'lower')

透過執行 `imsave()` 函式,可以將包含影像資料的任何陣列儲存到磁碟檔案。這裡透過將 origin 引數設定為 lower,儲存原始 png 檔案的垂直翻轉版本。

Image Viewer

如果在任何影像檢視器中開啟,新影像將顯示如下:

imgplot = plt.imshow(img)

Matplotlib - 變換

要在 Matplotlib 檢視器上繪製圖像,請執行 `imshow()` 函式。

matplotlib 包構建在轉換框架之上,可以輕鬆地在座標系之間移動。可以使用四個座標系。下表簡要介紹了這些系統: 座標系 描述
變換物件 資料座標系

`ax.transData`

座標系 使用者資料座標系,由 xlim 和 ylim 控制。

`ax.transAxes`

圖形 Axes 的座標系。(0,0) 為 Axes 的左下角,(1,1) 為 Axes 的右上角。

`fig.transFigure`

Figure 的座標系。(0,0) 為 Figure 的左下角,(1,1) 為 Figure 的右上角。 顯示座標系

None

這是顯示的畫素座標系。(0,0) 為左下角,(寬度, 高度) 為顯示的右上角(以畫素為單位)。

或者,可以使用 `matplotlib.transforms.IdentityTransform()` 代替 None。

axes.text(x,y,"my label") 

考慮以下示例:

文字放置在資料點 (x,y) 的理論位置。因此,我們會說“資料座標”。

axes.text(0.5, 0.5, "middle of graph", transform=axes.transAxes)

使用其他轉換物件,可以控制位置。例如,如果要將上述文字放置在 Axes 座標系的中心,請執行以下程式碼行:

這些轉換可用於任何型別的 Matplotlib 物件。`ax.text` 的預設轉換是 `ax.transData`,`fig.text` 的預設轉換是 `fig.transFigure`。

列印頁面