用python畫三角函數


Pyplot

http://www.labri.fr/perso/nrougier/teaching/matplotlib/

pyplot提供了一個方便的matplotlib基於對象庫的借口,是模仿了matlab,因此,在pyplot中的很多命令和參數,都和matlab相似。

簡單的畫圖simple plot

我們想在同一個圖中划出一個cos和sin函數圖,第一步是獲取cos和sin的數據,構建函數

import numpy as np

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)

C,S = np.cos(X), np.sin(X)

定義了一個numpy的數組X,從-π到π,共256個值,同時定義了C和S,也就是兩個三角函數,也有256個值。也是一個數組,也可以說是列表。

 

在matplotlib中,有一系列的默認設置,用來自定義各種屬性。可以通過配置各種屬性,來調整整個圖,比如表格大小、像素、線的寬度,顏色和風格,線軸、坐標、表格屬性、文本和字體屬性。在很多情況下,默認的設置都是比較好用的,如果是有特殊的需求,可以修改這些屬性值。

開始畫圖。

from matplotlib import pyplot as plt

import numpy as np

x = np.linspace(-np.pi,np.pi,256,endpoint=True)

y = np.sin(x)

z = np.cos(x)

 

plt.plot(x,y)

plt.plot(x,z)

 

plt.show()

 

實例化默認值

在下面的腳本中,可以通過修改所有的表格屬性值,來影響圖標的展出。而在上面的圖中,這些值都被明確的設定為默認值,現在可以通過交互式的操作,來看一下這些值影響的效果。

下面是線條屬性值和線條樣式。

from matplotlib import pyplot as plt
import numpy as np
#
創建一個6×8的圖框,像素為100
plt.figure(figsize=(6,8),dpi=100)
#
創建一個子圖,網格為1×1
plt.subplot(111)

x = np.linspace(-np.pi,np.pi,256,endpoint=True)
y = np.sin(x)
z = np.cos(x)
#
畫圖,使用不同的顏色和線條
plt.plot(x,y,color='blue',linewidth=1.0,linestyle='-')
plt.plot(x,z,color='red',linewidth=1.0,linestyle='-')
#
設置x軸的范圍
plt.xlim(-4,4)
#
設置x軸的標尺刻度,從-44,取9個值
plt.xticks(np.linspace(-4,4,9,endpoint=True))

#
設置y軸的范圍
plt.ylim(-1,1)
#
設置y軸的標尺刻度,從-11,取5個值
plt.yticks(np.linspace(-1,1,5,endpoint=True))
plt.show()

 

畫出來的圖如下所示:

第一步:修改線條顏色,cos線條是藍色,sin線條是紅色,設置線條寬度。

plt.plot(x,y,color='blue',linewidth=1.0,linestyle='-')
plt.plot(x,z,color='red',linewidth=1.0,linestyle='-')

 

第二步:修改限制,當前表格的限制有一點緊,可以適當擴充一下表格大小,主要是x和y的兩邊。

#放大xy
plt.xlim(x.min()*1.1,x.max()*1.1)
plt.ylim(y.min()*1.1,y.max()*1.1)

 

第三步:設置刻度值,因為在三角函數的圖像中,x軸上面應該顯示的是從-π到π的5個值。但是實際上顯示的是數字,所以想通過修改這個刻度值,來顯示。

#設置x軸的刻度值,顯示pi
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi])

第四步:設置刻度值標簽,實際上上面的圖還是沒有顯示π。現在是已經均分了x軸,雖然現實的是3.14,最好還是顯示π,在設置刻度值的時候,在第二個參數中也提供了對應的標簽。

plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.yticks([-1,0,1],[r'$-1$',r'$0$',r'$1$'])

兩個參數,將第一個參數值,用第二個參數來顯示

第五步:移動spines

Spine是一組線,連接了軸心刻度,在數據區域的邊界,可以放置在任意位置,目前是防止在軸心的邊界上了。需要改變一下,移動到中間,坐標系有四個象限,放棄了頂部和右側的部分,也就是輪廓。實際上意思是說,在這個圖里面,spine是最外側的4條線,將數據圖像封閉在其中。通過移動spine,讓坐標系的中心在原點,然后將上側和右側的spine刪除,也就是 取消顏色。然后將底部和左側的spine,移動到數據為0的區域。

有4個spine,分別是top,bottom,right和left,分別對應封閉這個數據圖形的4個邊。需要修改的代碼如下:

#移動邊界線,構建坐標系,原點為0
ax = plt.gca()#
獲取當前軸線實例
ax.xaxis.set_ticks_position('bottom')#x軸線,使用spine中的bottom
ax.yaxis.set_ticks_position('left')#y軸線,使用spine中的left
ax.spines['bottom'].set_position(('data',0))#bottom線的位置設置為數據為0的位置
ax.spines['left'].set_position(('data',0))#left線的位置設置為數據為0的位置
ax.spines['top'].set_color('none')#top線的顏色設置為無
ax.spines['right'].set_color('none')#right線的顏色設置為無

第六步:增加圖例

在圖的左上角增加圖例,需要在plot方法中增加關鍵字label,然后這個關鍵字會被在legend中調用。

#增加圖例
plt.plot(x,y,label='Sin(x)')
plt.plot(x,z,label='Cos(x)')
plt.legend(loc='upper left')#
將圖例放在左上角

 

第七步:注釋特定點

通過注釋命令,可以為特定的點增加注釋,也就是在圖中標出這些特定的點,假如要在途中,為2π/3標注出sin和cos的值。需要在曲線上,畫一條垂直的虛線,然后通過箭頭,在圖上表示出來。

#在圖上增加標注信息
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')

plt.annotate(r'$\cos(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(+10, +30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM