函數1為兩三角函數相加,Python 程式碼如下,在作圖時,先設定函數與 X、Y 的範圍,再設置想要畫的函數。此處以 Axies 作圖,使用fig, ax = plt.subplots(1)
設定只畫一張子圖。最後,設置 plt.show()
以顯示圖片。畫圖時應注意線條與數字的配色,好的配色可以讓圖片更加突出。
import numpy as np
import matplotlib.pyplot as plt
# function 1: sin(x) + cos(x)
def f(x): # 目標函數
return np.sin(x) + np.cos(x)
xmin = -11/4 * np.pi
xmax = 13/4 * np.pi
ymin = -3
ymax = 3
x = np.linspace(xmin, xmax, 1000)
y = f(x)
fig, ax = plt.subplots(1)
ax.plot(x, y, color='#e48826', linewidth=4)
for i in range(7):
if i % 2 == 1: # 周期線
plt.axvline(x=(-11/4+i)*np.pi, linestyle='--', color='#c6a78f', linewidth=2)
else:
plt.axvline(x=(-11/4+i)*np.pi, linestyle='--', color='#a0b3a8', linewidth=2)
# 漸進線
plt.axhline(y=max(y), linestyle='--', color='#bb99b7', linewidth=2)
plt.axhline(y=min(y), linestyle='--', color='#ecc8c9', linewidth=2)
# 設置 x 軸標籤
plt.text(-11/4*np.pi+0.4, 2**(1/2)+0.3, '$y=\sqrt{2}$', fontsize=20)
plt.text(+5/4*np.pi+0.4, -3**(1/2)-0.4, '$y=-\sqrt{2}$', fontsize=20)
ax.set_xticks(np.arange(-11/4, 17/4, 1) * np.pi)
ax.set_xticklabels([str(i)+('$\pi / 4$') for i in np.arange(-11, 17, 4)],
fontsize=10, color='black')
ax.set_ylim([ymin, ymax]) # 設置 y 範圍
plt.show() # 顯示圖片
函數 2 為一分式,分子與分母都有 Exponential 相除,Python 程式碼如下,此次是使用傳統界面作圖,即都是使用 plt
開頭的畫圖指令。作圖的步驟為:
def f(x): return
定義想要畫的函數,y
直接設定函數;此外,fig = plt.figure((8, 6))
設定圖片的長寬比例,其中 8:6 是一種常用的比例;
在 plt.plot(*)
中可以考慮加入一些線條的細節變化,例如:顏色、線條種類、粗細、透明度等。其中顏色種類可藉由打入編號或輸入顏色名稱,這部分可參考Matplotlib 說明手冊,此網站有許多配色可參考。如果使用plt.title(*)
來設置圖片名稱,圖名會出現在圖片上方。
# function 2: (1-EXP^{-2x})/(1+EXP^{-2x})
x = np.linspace(-10, 10, 1000) # 設置 x 的範圍
y = (1-np.exp(-2*x))/(1+np.exp(-2*x)) # 目標函數
fig = plt.figure(figsize=(8, 6)) # 圖片長寬比例
plt.plot(x, y, color='#e48826', linewidth=4) # 函數線條變化
# 漸進線
plt.axhline(y=max(y), linestyle='--', color='#bb99b7', linewidth=3)
plt.axhline(y=min(y), linestyle='--', color='#ecc8c9', linewidth=3)
plt.text(-5+0.2, +1-0.2, '$y=1$', fontsize=20)
plt.text(-5+0.2, -1+0.2, '$y=0$', fontsize=20)
plt.text(0+0.5, 0+0.1, '$(0,0)$', fontsize=20)
plt.plot(0, 0, marker='o', color='#c6a78f', markersize=10) # 原點
plt.grid(True) # 網格
# 設置縱軸與橫軸名稱
plt.xlabel('X', fontsize=15)
plt.ylabel('Y', fontsize=15)
plt.xticks([-10, -5, 0, 5, 10])
plt.yticks([-1, 0, 1])
plt.show()
函數長相如下,具有 local minimun 與 local maximun。Python 程式碼如下,須注意 Python 中的次方不是使用^
,而是**
。另外,在自訂函數時,此函數不可以使用 np.power(*)
,因為該程式碼開三次方根只能計算大於零的數值,小於零的數值算不了,所以此處改以np.cbrt(*)
開三次方根。
圖片中線條顏色,除了在Matplotlib 官網中可查詢到的顏色之外,可以到網路上搜尋「調色盤」,或英文關鍵字 color palette找尋更多合適的顏色。本圖顏色使用Color Hunt 調色盤上的顏色,建議做圖新手可以多多著墨配色,畢竟必須好圖要搭好的顏色。
# function 7: f(x) = {(4-x^3) / (1+x^2)}^(1/3)
xmin, xmax = -4, 5
ymin, ymax = -2, 3
x = np.arange(xmin, xmax, 0.01)
# 不能使用 np.power 改用 np.cbrt
def f(x):
return np.cbrt((4 - x**3) / (1 + x**2)) # 目標函數
fig = plt.figure(figsize=[6, 4])
plt.plot(x, f(x), color='#F08A5D', linewidth=4)
# 2 critical points
plt.plot(-1.533, 1.314, marker='o', color='#B83B5E', markersize=10)
plt.plot(0, 4**(1/3), marker='o', color='#B83B5E', markersize=10)
# 文字說明
plt.text(-2.5, 1.95, '$local \ maximun = (0, \sqrt[3]{4})$', color='#B83B5E', \
fontsize=18, style='italic', fontweight='bold')
plt.text(-4, 1.1-0.4, '$local \ minimun = (-1.513, 1.314)$', color='#B83B5E', \
fontsize=18, style='italic', fontweight='bold')
plt.ylim([ymin, ymax])
plt.xlabel('$x$', fontsize=15), plt.ylabel('$f(x)$', fontsize=15)
plt.yticks(np.arange(ymin, ymax + 1, 1))
plt.grid(True)
plt.show()