iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
AI/ ML & Data

藉由 Python 介紹統計學與機器學習系列 第 5

Day 05:【Python 入門-5】作圖實例

  • 分享至 

  • xImage
  •  

函數1:$f(x) = sin(x) + cos(x)$

函數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() # 顯示圖片

sinx+cosx

函數2:$f(x) = \frac{1-e^{-2x}}{1+e^{-2x}}$

函數 2 為一分式,分子與分母都有 Exponential 相除,Python 程式碼如下,此次是使用傳統界面作圖,即都是使用 plt 開頭的畫圖指令。作圖的步驟為:

  1. 可使用 def f(x): return定義想要畫的函數,
  2. 或也可以使用 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()

EXP

函數3:$f(x) = \sqrt[3]{\frac{4-x^3}{1+x^2}}$

函數長相如下,具有 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()

function 7: f(x) = {(4-x^3) / (1+x^2)}^(1/3)


上一篇
Day 04:【Python 入門-4】作圖
下一篇
Day 06:【Python 入門-6】作圖實例
系列文
藉由 Python 介紹統計學與機器學習31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言