1. 程式人生 > >使用Matplotlib畫出線形圖的簡單教程

使用Matplotlib畫出線形圖的簡單教程

# import matplotlib.pyplot as plt
import numpy as np
#ipython 畫圖
%pylab inline 
In [10]:
#簡單線圖 

#生成測試資料 
x = np.linspace(-1,1,50) 
y = np.cos(x)

#figure建立一個繪圖物件 figsize 圖片大小
plt.figure(figsize=(10,5))

#畫圖 
plt.plot(x,y) #預設

#所有繪圖物件
plt.show()

In [51]:
#畫多個子圖

#生成測試資料 
x
= np.linspace(-3,3,50) y = np.cos(x) y1 = 2*x+1 y2 = np.sin(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) plt.subplot(221) # 第一行的左圖 plt.plot(x,y) plt.subplot(222) # 第一行的右圖 plt.plot(x,y1) plt.subplot(212) # 第二整行 plt.plot(x,y2) #所有繪圖物件 plt.show()

In [22]:
#顯示標題和X、Y軸的文字和範圍
#生成測試資料 x = np.linspace(-1,1,50) y = np.cos(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) #畫圖 plt.plot(x,y) #預設 plt.xlabel("x label") #X軸的文字 plt.ylabel("y label")#Y軸的文字 plt.title("this is a title") #圖表的標題 plt.xlim(-1.2,1.2) #設定Y軸的範圍 plt.ylim(-1.2,1.2) #設定Y軸的範圍 #所有繪圖物件 plt.show()

In [24]:
#設定X、Y軸座標轉換成字元座標

#生成測試資料 
x = np.linspace(-3,3,50) 
y = np.cos(x)

#figure建立一個繪圖物件 figsize 圖片大小
plt.figure(figsize=(10,5))

#畫圖 
plt.plot(x,y) #預設

#根據相應座標數 轉換成字元座標
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           ['$-\pi$', '$-\pi/2$',  '$0$', '$\pi/2$','$\pi$']) 
plt.yticks([-1,0,1],['-one','zero','+one'])

#所有繪圖物件
plt.show()

In [12]:
#在同一figure物件中畫多條線圖

#生成測試資料 
x = np.linspace(-1,1,50) 
y = np.cos(x)
y2 = np.sin(x)
#figure建立一個繪圖物件 figsize 圖片大小
plt.figure(figsize=(10,5))

#畫圖 
plt.plot(x,y) #預設
plt.plot(x,y2) #預設
#所有繪圖物件
plt.show()

In [45]:
#帶有圖示的線圖 

#生成測試資料 
x = np.linspace(-1,1,50) 
y = np.cos(x)
y2 = np.sin(x)
#label 在圖示中顯示 color 線的顏色 linewidth線的寬度 linestyle線的樣式
plt.plot(x,y,label='$cos(x)$',color='red',linewidth=1.0,linestyle='--') #前後新增"$"符號 表示數學公式
plt.plot(x,y2,label='$sin(x)$')

#顯示圖例 plt.plot()中label和顏色及線型
#legend 的位置引數 best/upper right/upper left/lower left/lower right/right/center left
#/center right/lower center/upper center/center
plt.legend(loc='best')

#所有繪圖物件
plt.show()

In [48]:
#設定X、Y軸的顯示隱藏和移動 字型背景的透明度

#生成測試資料 
x = np.linspace(-1,1,50) 
y = np.cos(x)
y2 = np.sin(x)
#label 在圖示中顯示 color 線的顏色 linewidth線的寬度 linestyle線的樣式
plt.plot(x,y,label='$cos(x)$',color='red',linewidth=1.0,linestyle='--') #前後新增"$"符號 表示數學公式
plt.plot(x,y2,label='$sin(x)$')

#先把右邊和上邊的邊界設定為不可見
ax=plt.gca()
ax.spines['right'].set_color('none') 
ax.spines['top'].set_color('none')

#然後把下邊界和左邊界移動到0點
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0)) 
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

#設定座標軸字型的透明度
ax=plt.gca()
for label in ax.get_xticklabels()+ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='blue',edgecolor='none',alpha=0.7))  #facecolor 前面顏色  edgecolor邊框線 alpha透明度
    
#所有繪圖物件
plt.show()

In [42]:
#給X、Y軸的座標新增標註

#生成測試資料 
x = np.linspace(0,np.pi,20)
y = np.sin(x)

#label 在圖示中顯示 color 線的顏色 linewidth線的寬度 linestyle線的樣式
plt.plot(x,y,label='$cos(x)$',color='red',linewidth=1.0,linestyle='--') #前後新增"$"符號 表示數學公式


#新增標註
x0 = np.pi/2
y0 = np.sin(x0) 

plt.scatter(x0,y0,color='black')  #顯示一個點
plt.plot([x0,x0],[0,y0],'b--') #在點到x軸畫出垂直線
#標註方法1
plt.annotate('y = sin(x)' % y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',
             arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=-0.2'))
#標註方法2
plt.text(x0+0.1, y0,'this is a sin(x)line')

#所有繪圖物件
plt.show()

In [43]:
#全部設定完成
#複雜線形圖
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s=np.cos(x),np.sin(x)

#這裡`b-`是`color="blue",linestyle="-"`的簡寫
#`lw`=`linewidth` 的簡寫
fig = plt.figure(figsize=(8,6),dpi=80)
plt.plot(x, c, 'b-',lw=1.5,label='cosine')
plt.plot(x, s, 'r-',lw=1,label='sine')

#顯示圖例 plt.plot()中label和顏色及線型 loc設定位置
plt.legend(loc='upper left') 
#legend 的位置引數
'''
	best
	upper right
	upper left
	lower left
	lower right
	right
	center left
	center right
	lower center
	upper center
	center
'''

plt.xlim(-3.2,3.2) #設定Y軸的範圍 plt.xlim(x.min()*1.1, x.max()*1.1)
plt.ylim(-1.2,1.2) #設定Y軸的範圍 plt.ylim(c.min()*1.1, s.max()*1.1)

#根據相應座標數 轉換成字元座標
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           ['$-\pi$', '$-\pi/2$',  '$0$', '$\pi/2$','$\pi$']) 
#plt.yticks([-1,0,1],['-one','zero','+one'])

#設定座標軸的位置
#先把右邊和上邊的邊界設定為不可見
ax=plt.gca()
ax.spines['right'].set_color('none') 
ax.spines['top'].set_color('none')
#然後把下邊界和左邊界移動到0點
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0)) 
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

#新增標註
x0 = np.pi/2
y0 = np.sin(x0) 
plt.scatter(x0,y0,color='black')  #顯示一個點
plt.plot([x0,x0],[0,y0],'b--') #在點到x軸畫出垂直線
#標註方法1
plt.annotate('y = sin(x)' % y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',
             arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=-0.2'))
#標註方法2
plt.text(x0+0.1, y0,'this is a sin(x)line')

#設定座標軸字型的透明度
ax=plt.gca()
for label in ax.get_xticklabels()+ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.7))

plt.show()