1. 程式人生 > >Matplotlib基礎-常見物件

Matplotlib基礎-常見物件

     一、概述

    在matplotlib中,整個影象為一個Figure物件。在Figure物件中可以包含一個或者多個Axes物件。每個Axes(ax)物件都是一個擁有自己座標系統的繪圖區域。所屬關係如下:

下面以一個直線圖來詳解影象內部各個元件內容:

其中:title為影象標題,Axis為座標軸, Label為座標軸標註,Tick為刻度線,Tick Label為刻度註釋。各個物件關係可以梳理成以下內容:

影象中所有物件均來自於Artist的基類。

二、Artist 物件
Artists分為簡單型別和容器型別兩種。簡單型別的Artists為標準的繪圖元件,例如Line2D、 Rectangle、 Text、AxesImage 等等。而容器型別則可以包含許多簡單型別的Artists,使它們組織成一個整體,例如Axis、 Axes、Figure等。
舉一個建立簡單Artist物件的過程哈,直接上程式碼:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(1)        # 建立了一個figure物件;

# figure物件的add_axes()可以在其中建立一個axes物件,
# add_axes()的引數為一個形如[left, bottom, width, height]的列表,取值範圍在0與1之間;
# 我們把它放在了figure圖形的上半部分,對應引數分別為:left, bottom, width, height;
ax = fig.add_axes([0.1, 0.5, 0.8, 0.5]) 
ax.set_xlabel('time')           # 用axes物件的set_xlabel函式來設定它的xlabel

line =ax.plot(range(5))[0]      # 用axes物件的plot()進行繪圖,它返回一個Line2D的物件;
line.set_color('r')             # 再呼叫Line2D的物件的set_color函式設定color的屬性;
plt.show()

三、Figure 容器
在構成圖表的各種Artist物件中,最上層的Artist物件是Figure。我們可以呼叫add_subplot()與add_axes()方法向圖表中新增子圖,它們分加到figure的axes的屬性列表中。add_subplot()與add_axes()返回新建立的axes物件,分別為axesSuubplot與axes, axesSuubplot為 axes的派生類。另外,可以通過delaxes()方法來刪除哦;

figure物件可以有自己的簡單的artist物件。

下面列出Figure物件中包含的其他Artist物件的屬性:

axes:Axes物件列表;
patch:作為背景的Rectangle物件;
images:FigureImage物件列表,用於顯示影象;
legends:Legend 物件列表,用於顯示圖示;
lines:Line2D物件列表;
patches:Patch物件列表;
texts:Text 物件列表,用於顯示文字;
 

# 使用figure物件繪製直線
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
fig = plt.figure()

line1 = Line2D([0,1],[0,1], transform=fig.transFigure, figure=fig, color="r")
line2 = Line2D([0,1],[1,0], transform=fig.transFigure, figure=fig, color="b")
fig.lines.extend([line1, line2])

fig.show()


四、Axes 容器
它是整個matplotlib的核心,它包含了組成圖表的眾多的artist物件。並且有很多方法。我們常用的Line2D啦,Xaxis,YAxis等都是它的屬性哦;可以通過這個物件的屬性來設定座標軸的label啦,範圍啦等之類的。乾脆直接用plt.getp()檢視它的屬性,然後通過set_屬性名()函式來設定就好啦。

五、Axis 容器
axis容器包括了座標軸上的刻度線、刻度標籤等、座標網路等內容。

對於座標軸上的刻度相關的知識,它是這麼分的:首先是major_ticks()和minor_ticks(), 然後呢,每個刻度又包括刻度線(ticklines)、刻度標籤(ticklabels)、刻度位置(ticklocs)。本來呢,axis應該刻度,然後呢,刻度再包含那三個,但是呢,為了方便,axis就都包含了。其實也是有點交叉吧。上面的axes也會交叉包含它所包含物件的物件的。

 

from matplotlib.lines import Line2D
import matplotlib.pyplot as plt

# 通過axis來更改座標軸
plt.plot([1,2,3],[4,5,6])
# gca()獲取當前的axes繪圖區域,呼叫gcf()來獲得當前的figure
axis = plt.gca().xaxis        
axis.get_ticklocs()                 # 得到刻度位置;
axis.get_ticklabels()               # 得到刻度標籤;
axis.get_ticklines()                # 得到刻度線;
axis.get_ticklines(minor = True)    # 得到次刻度線; 舉個例子:就像我們的尺子上的釐米的為主刻度線,毫米的為次刻度線;
for label in axis.get_ticklabels():  
    label.set_color('red')          # 設定每個刻度標籤的顏色;
    label.set_rotation(45)          # 旋轉45度;
    label.set_fontsize(16)          # 設定字型大小;
for line in axis.get_ticklines():
    line.set_color('green')          
    line.set_markersize(15)         # 設定刻度線的長短;
    line.set_markeredgewidth(3)     # 設定線的粗細
plt.show()


pyplot函式提供了兩個繪製文字的函式:text()和figtext()。它們分別呼叫了當前的Axes物件與當前的Figure物件的text()方法進行繪製文字。text()預設在數字座標系(就是axes在的座標系,用座標軸的數字來表示座標)中畫, figtext()預設在圖表座標系(就是figure在圖表中啦,座標範圍從0 到 1 )中畫,我們可能通過trransform引數進行座標系的轉換。

plt.text(1, 1, ‘hello,world’, color = ‘bule’) #還可以寫更多引數的; 
plt.figtexe(0.1, 0.8 ,”i am in figure’, color = ‘green’)