python數據可視化工具matplotlib各個畫圖工具使用說明。
1 線形圖
直接調用plot()函數繪製
importmatplotlib.pyplot as plt # matplotlib包,可視化數據
importnumpy as np # numpy包,各類數學函數包
#獲取數據集,範圍是從-1到1,之間的50個
x= np.linspace(0,10,500)
#繪製的函數
y= 2*x + 1
#繪製圖像
plt.plot(x,y)
plt.show()
圖1-1 普通圖像繪製
2 Figure
2.1 Figure特點
將函數圖像畫在Figure窗體中,需要注意的是:
f1 = plt.figure(num = 1)
……
f2 = plt.figure(num=2)
……
在f1和f2窗體之間的對函數圖像的設置都是針對f1上的。f2後面的代碼在遇到下一個figure之前都是作用在f2上的。
2.2 關鍵代碼
#第一個figure
#在這個figure聲明之後,下一個figure聲明之前的代碼都是在當前figure上的操作
#num = 1 設置的是figure窗體的序號
plt.figure(num= 1)
plt.plot(x,y1,color= 'red')
#將兩個圖像在同一個figure中畫
plt.plot(x,y2,linestyle='--')
#第二個figure
#figuresize=(10*14) 設置的是figure的長高
plt.figure(num= 2,figsize=(10,14))
#linestyle='--' 設置繪製的線爲虛線
plt.plot(x,y2,linestyle='--')
圖2-1 figure效果
3 座標軸設置
3.1 座標軸設置的基本步驟
(1) 獲取figure邊框的對象
(2) 將上、右的邊框隱藏
(3) 設置x軸爲底邊框,y軸爲左邊框
(4) 設置x軸,y軸的位置,是通過設置底邊框,左邊框的位置設置。設置x、y軸的位置,就是設置x軸的起點在y軸上的位置,設置y軸的起點在x軸上的位置。
(5) 給x、y軸添加label標籤
(6) 設置座標軸的刻度
詳細的步驟看代碼。
3.2 關鍵代碼
#設置座標軸的取值範圍
plt.xlim(0,10)
plt.ylim(0,20)
#設置座標軸的標籤
plt.xlabel("x")
plt.ylabel("y")
#設置X軸的刻度
new_xticks= np.linspace(0,10,10) # 範圍是-1~2,取5個值
new_yticks= np.linspace(0,20,5)
plt.xticks(new_xticks)
plt.yticks(new_yticks)
#設置Y軸刻度標籤
plt.yticks([5,10,15,20],
[r'$normal$',r'$good$',r'$very\good$',r'$perfect$'])
圖3-1 座標軸位置設置效果
4 Legend
4.1 Legend簡介
Legend是在figure窗體中顯示一個小的窗體,標註函數圖像的相關信息。可以設置其位置,顯示的內容,以及函數圖像在其內的標籤。如圖4-1中紅色框框所示。
4.2 關鍵代碼
#handles=[l1,l2,]表示要顯示在框中的線,labels=['a','b']表示在框中各個線的標籤,loc = 'best'設置框的位置,best,會自動將框放在數據最少的位置
#plt.legend(handles=[l1,l2,],labels=['a','b',],loc = 'best')
plt.legend(loc= 'best')
圖4-1 Legend
5 Annotion
5.1 函數圖像標註
給函數圖像的某一點添加標註,比如表明某一點的函數值,或者對某點進行解釋說明。有兩種方式:一個是調用annotion() 函數繪製,一個是調用text()繪製。
5.2. 關鍵代碼
(1) 調用annotion
plt.annotate(r'$2x+5=%s$'%y0,xy= (x0,y0),xycoords = 'data',xytext = (+30,-30),textcoords = 'offsetpoints',fontsize = 16,
arrowprops= dict(arrowstyle = '->',connectionstyle = "arc3,rad = .2"))
‘’’
r'$2x+5=%s$'%y0:設置標註內容
xy =(x0,y0):設置標註點
xycoords ='data' 參考座標
xytext =(+30,-30):標註文本的位置
‘’’
(2) 調用text
plt.text(-8,8,r'$this\is\ the\ some\ text.\mu\ \sigma_i\ \alpha_t$',fontdict={'size':16,'color':'r'})
圖5-1 annotion效果
6 Tick
6.1 設置座標軸刻度的背景
在函數圖像複雜的情況下,座標軸刻度可能會被遮蓋,這時可以通過設置刻度的背景顏色來凸顯出刻度,將用到bbbox()函數。
6.2 關鍵代碼
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(12)
# alpha = 0.7 設置透明度edgecolor = 'None':邊框 facecolor = 'white':背景
label.set_bbox(dict(facecolor = 'white',edgecolor = 'None',alpha =0.7,zorder = 2))
圖6-1 Tick效果
7 Scatter
7.1 Scatter簡介
用來繪製散點圖,可以繪製直線、曲線的散點圖。實際效果看圖7-1。
7.2 關鍵代碼
importmatplotlib.pyplot as plt
import numpy as np
#1.獲取數據
#用隨機數生成一個呈正太分佈的二維數據組,平均值是0,方差是1
n= 1024
X= np.random.normal(0,1,n) # 所有x 的值
Y= np.random.normal(0,1,n)
#2.繪製散點圖
T= np.arctan2(Y,X) # 獲取顏色數值
plt.scatter(X,Y,s=75,c= T,alpha=0.5)
#3.設置取值範圍和隱藏座標軸刻度
plt.xlim(-1.5,1.5)
plt.ylim(-1.5,1.5)
plt.xticks(()) # 隱藏x軸
plt.yticks(())
plt.show()
圖7-1 scatter效果圖
8 Bar
8.1 Bar簡介
用來繪製柱狀圖,參數有:X,Y的值、背景顏色、邊框顏色等等。可以對每個柱狀設置標籤等等。
8.2 關鍵代碼
import matplotlib.pyplot as plt
import numpy as np
# 1.獲取數值
n = 12 # 柱狀數量
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n) # 均勻分佈的數據
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
# 2.繪圖
plt.bar(X,+Y1,facecolor = '#9999ff',edgecolor = 'white')
plt.bar(X,-Y2,facecolor = '#ff9999',edgecolor = 'white')
# 3.設置標註
for x,y in zip(X,Y1):
plt.text(x, y + 0.02, '%.2f'%y, ha = 'center', va = 'bottom')
for x,y in zip(X,Y2):
plt.text(x, -y - 0.02,'%.2f'%y, ha = 'center', va = 'top')
# 4.設置取值範圍,隱藏座標軸
plt.xticks(())
plt.yticks(())
plt.xlim(-.5, n)
plt.ylim(-1.25, 1.25)
plt.show()
圖8-1 Bar效果圖
9 線性圖、Figure、座標軸設置的完整例子
import matplotlib.pyplot as plt
import numpy as np
# 獲取數據集,範圍是從-1到1,之間的50個
x = np.linspace(-10 ,10 ,500)
# 繪製的函數
y1 = 2* x + 1
y2 = x**2 - 10
plt.figure(num=1) # num = 1 設置的是figure窗體的序號
# ====================設置座標軸==========================
# 設置座標軸的取值範圍
plt.xlim(-10,10)
plt.ylim(-20,20)
#設置座標軸的標籤
plt.xlabel("x")
plt.ylabel("y")
# 設置X軸的刻度
new_xticks = np.linspace(-10,10,9) # 範圍是-1~2,取5個值
new_yticks = np.linspace(-20,20,9)
plt.xticks(new_xticks)
plt.yticks(new_yticks)
# 設置顯示的座標軸
ax = plt.gca() # 獲取邊框對象,gca: getcurrent axis
ax.spines['right'].set_color('none') # 設置右邊和頂部的座標爲空白,只留下左邊和底部的
ax.spines['top'].set_color('none')
# 調整座標軸的位置
# 設置x座標刻度數組或名稱的位置,所有位置有:top,bottom,both,default,none
ax.xaxis.set_ticks_position('bottom') # 設置x軸爲底部的邊框
# 設置x軸座標的位置,位置所有屬性:outward,axes,data
ax.spines['bottom'].set_position(('data',0)) # ax.spines['bottom'] 是指 x軸
ax.yaxis.set_ticks_position('left') # 設置y軸爲左側的邊框
# 設置y座標刻度的位置,所有位置:left,right,both,default,none
ax.spines['left'].set_position(('data',0))
# ====================設置座標軸==========================
# 繪製圖像
l1, = plt.plot(x, y1, color='red',label = 'line')
l2, = plt.plot(x, y2, linestyle='--',label ='square line')
#================= 繪製legend 框===========================
# handles=[l1,l2,]表示要顯示在框中的線,labels=['a','b']表示在框中各個線的標籤,loc = 'best'設置框的位置,best,會自動將框放在數據最少的位置
#plt.legend(handles=[l1,l2,],labels=['a','b',],loc = 'best')
plt.legend(loc = 'best')
#================= 繪製legend 框===========================
# 最後show,才能繪製圖像
plt.show()