首頁 > 軟體

使用 NumPy 和 Matplotlib 繪製函數圖

2021-09-27 13:02:07

Matplotlib是Python的繪相簿,它與Numpy一起使用

【引例】
畫出y=2*x+5的函數影象

import numpy as np
from matplotlib import pyplot as plt

#設定橫座標取值、確定函數表示式
x = np.arange(1, 11)
y = 2 * x + 5
#新增標題、橫座標、縱座標標籤
plt.title("Matplotlib demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
#畫函數影象
plt.plot(x, y)
plt.show()

【執行結果】

如果需要函數影象以圓點呈現,而不是用線呈現,則需要將

plt.plot(x,y)改為plt.plot(x,y,'ob')

【執行結果】

正弦波 y=sin(x)

import numpy as np
from matplotlib import pyplot as plt

#設定橫座標取值、確定函數表示式
x = np.arange(0, 3*np.pi,0.1)
y = np.sin(x)
#新增標題、橫座標、縱座標標籤
plt.title("y=sin(x)")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
#畫函數影象
plt.plot(x, y)
plt.show()

【執行結果】

餘弦函數只需將
y = np.sin(x) 改為 y = np.cos(x)即可

subplot()函數

應用subplot()函數,在同一圖中繪製不同的東西

# ReLU和Sigmoid啟用函數示意圖
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches

#設定圖片大小
plt.figure(figsize=(6, 4))

# x是1維陣列,陣列大小是從-10. 到10.的實數,每隔0.1取一個點
x = np.arange(-10, 10, 0.1)
# 計算 Sigmoid函數
s = (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))


# 計算ReLU函數
y = np.clip(x, a_min = 0., a_max = None)

#########################################################
# 以下部分為畫圖程式

# 設定兩個子圖視窗,將Sigmoid的函數影象畫在上邊
f = plt.subplot(2,1,1)
# 畫出函數曲線
plt.plot(x, s, color='r')
# 新增文字說明
plt.text(-5., 0.9, r'$y=sigmoid(x)$', fontsize=13)
# 設定座標軸格式
currentAxis=plt.gca()
currentAxis.xaxis.set_label_text('x', fontsize=15)
currentAxis.yaxis.set_label_text('y', fontsize=15)

# 將ReLU的函數影象畫在下邊
f = plt.subplot(2,1,2)
# 畫出函數曲線
plt.plot(x, y, color='g')
# 新增文字說明
plt.text(-3.0, 9, r'$y=ReLU(x)$', fontsize=13)
# 設定座標軸格式
currentAxis=plt.gca()
currentAxis.xaxis.set_label_text('x', fontsize=15)
currentAxis.yaxis.set_label_text('y', fontsize=15)

plt.show()

【執行結果】

普通圖

from matplotlib import pyplot as plt
import numpy as np
n = 256  #n可以理解為曲線的平滑程度
X = np.linspace(-np.pi,np.pi,n,endpoint=True)
Y = np.sin(2*X)

plt.plot(X,Y+1,color='red',alpha=1.00)
plt.plot(X,Y-1,color='blue',alpha=1.00)
plt.show()

【執行結果】

條形圖

from matplotlib import pyplot as plt
#資料組1
x =  [5,8,11]  #橫座標
y =  [12,16,6] #對應值
#資料組2
x2 =  [6,9,12] #橫座標
y2 =  [6,15,7] #對應值
plt.bar(x, y, color = 'r', align =  'center')
plt.bar(x2, y2, color =  'g', align =  'center')
plt.title('Bar graph')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()

【執行結果】

散點圖

from matplotlib import pyplot as plt
import numpy as np

n = 1024
X = np.random.normal(0,30,n)
Y = np.random.normal(0,30,n)

plt.title('scale:30')
plt.scatter(X,Y,color='red')
plt.show()

【執行結果】以下分別是方差分別為5,10,15,20,25,30的散點圖

等高線圖

from matplotlib import pyplot as plt
import numpy as np

def f(x,y):return(1-x/2+x**5+y**3)*np.exp(-x**2-y**2) #等高線模型

n = 256  #n可以理解為曲線的平滑程度
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)

plt.contourf(X,Y,f(X,Y),8,alpha=.75,cmap='jet')
C = plt.contour(X,Y,f(X,Y),8,color='black',linewidth=.5)
plt.show()

【執行結果】

灰度圖

from matplotlib import pyplot as plt
import numpy as np

def f(x,y):return(1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 10
x = np.linspace(-3,3,4*n)
y = np.linspace(-3,3,4*n)
X,Y = np.meshgrid(x,y)

plt.imshow(f(X,Y))
plt.show()

【執行結果】

餅狀圖

from matplotlib import pyplot as plt
import numpy as np

n = 20  #n決定了有多少個分割區,該程式碼顯示有20個分割區
Z = np.random.uniform(0,1,n)
plt.pie(Z)
plt.show()

【執行結果】

量場圖

from matplotlib import pyplot as plt
import numpy as np

n = 8
X,Y = np.mgrid[0:n,0:n]
plt.quiver(X,Y,color="red")
plt.show()

【執行結果】

極軸圖

from matplotlib import pyplot as plt
import numpy as np

plt.figure(figsize=(4,4))
ax1 = plt.subplot(111,projection='polar')
ax1.set_title('spot fish')
ax1.set_rlim(0,12)

data = np.random.randint(1,10,10)
theta = np.arange(0,2*np.pi,2*np.pi/10)

bar = ax1.bar(theta,data,alpha=0.5)
for r,bar in zip(data,bar):
    bar.set_facecolor(plt.cm.jet(r/10.))
plt.show()

【執行結果】

3D圖

到此這篇關於使用 NumPy 和 Matplotlib 繪製函數圖的文章就介紹到這了,更多相關NumPy Matplotlib 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com