佛倫斯
在NumPy課應該就下載過了
Windows 命令提示字元
pip install matplotlib
Mac 終端機
pip3 install matplotlib
進去Python Shell
import matplotlib
都是兩個底線
我們開始吧!
據我對它的瞭解
它就是拿來繪製圖表的
期待待會的課程~^^
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,11)
y = 2 * x + 5
plt.title("x-t graph")
plt.xlabel("time(unit:s)")
plt.ylabel("displacement(unit:m)")
plt.plot(x,y)
plt.show()
根據這個圖形的敘述何者正確?(多選)
(1) 圖形過原點
(2) 圖形過點 \((7, 1)\)
(3) 圖形斜率為 \(2\)
(4) 圖形過 \((11, 27)\)
(5) 橫軸標題是"time(unit:s)"
(numpy.array的運算應該還記得吧)
答案:(3)(5)
\(y=2x+5\)
\(0\leq x<11\)
matplotlib.pyplot裡面有很多函式
函式的功能大致把圖形的骨架畫出來
例如建立圖表、畫線畫點
反正就是除了美編以外的
import matplotlib.pyplot as plt
matplotlib.pyplot 簡稱是 "plt"
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show() # 把圖表印出
plt.plot():畫點
他預設會把點連起來
等等會教怎麼解決
假如你要畫 \(n\) 個點
它們的座標分別為 \((x_1, y_1), (x_2, y_2), \cdots (x_n, y_n)\)
用python寫出來就是像這樣:
plt.plot([x1, x2, ..., xn], [y1, y2, ..., yn])
像前面的範例
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
標的點就是
\((1, 1), (2, 4), (3, 9), (4, 16)\)
(還記得numpy.array的,恭喜你們)
不想要將那四個點連線怎麼辦?
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'o')
plt.show() # 把圖表印出
這個參數預設是 '–'
也就是連線的意思
如果改成 'o' 就可以
取消連線
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'r-')
plt.show() # 把圖表印出
'r–' 表示紅色線
可以猜猜看 'bo'
代表什麼
但顏色和樣式不是
目前的重點
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show() # 把圖表印出
特例
發現 plot() 裡面只有一個中括號了嗎
這個寫法是預設 x 座標依序是 \([0, 1, 2]\)
所以標出來的點是 \((0, 1), (1, 2), (2, 3)\)
假設你在做物理實驗,要記錄每一秒的狀況
而時間軸一定是橫軸
我左思右想
這麼奇怪的簡寫,其實還滿合理的
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show() # 把圖表印出
還是放個圖,比較有誠意
import numpy as np
royalex = np.arange(9)
dot_line = np.arange(0, 10, 2)
penghc = np.arange(69, 60, -2)
print(royalex)
print(dot_line)
print(penghc)
# 規則跟range一樣
# 輸出:
# [0 1 2 3 4 5 6 7 8]
# [0 2 4 6 8]
# [69 67 65 63 61]
# 記住,若R = np.arange(a, b, c)
# R裡不會有元素b
偷一下上次的簡報
還記得arange是什麼嗎
放三個參數:首項、末項、公差
注意末項會被砍
import numpy as np
x = np.linspace(0, 2, 9)
# 把0~2切成9-1=8等份,然後頭尾都印出,所以會輸出9數
y = np.linspace(0, 8, 11)
# 把0~8切成10等份,頭尾都輸出,共輸出11數
print(x)
print(y)
# 輸出:
# [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
# [0. 0.8 1.6 2.4 3.2 4. 4.8 5.6 6.4 7.2 8. ]
np.linspace(x, y, z)要切幾等分的問題可以想想種樹問題
8棵樹會有7個間隔,所以如果要切7份就要在z處填8
這邊也趕快想起來喲
官方給的範例。這根本嗑藥
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
# r--是紅色虛線;bs是藍色正方形;g^是綠色三角形
plt.show()
同一張表裡面畫三個圖形
就通通放在plot裡然後用逗號隔開就好
不是bullsh*t
(t**2 代表t裡面每個元素都2次方)
等等看下一張投影片
猜猜 plt.axis() 是什麼意思
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'bo')
plt.axis([0, 6, 0, 20])
plt.show() # 把圖表印出
很明顯吧
plt.axis([0, 6, 0, 20])
plt.axis([0, 6, 0, 20])
可以發現這個 function 就是在約束
兩軸顯示的區間
像上面那行就是代表僅顯示
\(0\leq x\leq 6,\ 0\leq y\leq 20\)
這個區間裡面的圖形
plt.axis([xmin, xmax, ymin, ymax])
表示僅顯示
\(x_{min }\leq x\leq x_{max},\ y_{min}\leq y\leq y_{max}\)
這個區間裡面的圖形
字串當變數??!
import numpy as np
import matplotlib.pyplot as plt
dtpw = {'D': np.arange(50),
'T': np.linspace(-100, -2, 50)}
plt.plot('D', 'T', 'ro', data=dtpw)
plt.axis([0, 50, -100, 0])
plt.show()
dtpw是一個data
'D'和'T'都代表一個numpy.array
'D' 是 \(0\sim 49\) 的 \(50\) 個整數
'T' 是 \(-100\sim -2\) 等差的 \(50\) 個數
把'D'和'T'放進plot()裡面有點像當變數用
import numpy as np
import matplotlib.pyplot as plt
dtpw = {'D': np.arange(50),
'T': np.linspace(-100, -2, 50)}
plt.plot('D', 'T', 'r-', data=dtpw)
plt.axis([0, 50, -100, 0])
plt.show()
假如data裡面的東西要再做運算
import numpy as np
import matplotlib.pyplot as plt
dtpw = {'D': np.arange(50),
'T': np.linspace(-100, -2, 50)}
dtpw['W'] = np.abs(dtpw['T'])**(1/2)*(-1)
plt.plot('D', 'W', 'r-', data=dtpw)
plt.axis([0, 50, -10, 0])
plt.show()
(numpy.array的運算)
import numpy as np
import matplotlib.pyplot as plt
dtpw = {'D': np.arange(1, 7),
'T': np.array([4, -11, 0, -2, 3, 9])}
dtpw['P'] = (dtpw['D']+5)*2
dtpw['W'] = np.abs(dtpw['T'])-6
plt.plot('P', 'W', 'o', data=dtpw)
plt.show()
以下那個點在圖形上?
(A) \((22, 3)\)
(B) \((1, 4)\)
(C) \((18, -8)\)
(A) \((22, 3)\)
(B) \((1, 4)\)
(C) \((18, -8)\)
橫軸是項目
※佛倫斯沒有任何政治立場
此圖僅作為範例
import matplotlib.pyplot as plt
names = ['Aviego', 'Braviego', 'Ceviego']
values = [1, 10, 5]
plt.plot(names, values, 'o')
plt.show()
還有一些剛剛沒講
plt.show():顯示圖表
plt.title():圖名
plt.xlabel():x軸標題
plt.ylabel():y軸標題
plt.bar():長條圖
plt.scatter():散部圖
plt.legend():顯示圖例
等等用範例簡單帶過,這邊不難
import matplotlib.pyplot as plt
names = ['Gold', 'Silver', 'Bronze']
values = [1, 3, 4]
plt.bar(names, values)
plt.title('Asian-Pacific Weak-Pretending Olympiad')
plt.show()
import matplotlib.pyplot as plt
names = ['Gold', 'Silver', 'Bronze']
values = [1, 3, 4]
plt.scatter(names, values, label='medalists')
plt.title('Asian-Pacific Weak-Pretending Olympiad')
plt.legend()
plt.show()
其實這就是 plt.plot()
然後拿掉線而已
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,11)
y = 2 * x + 5
plt.title("x-t graph")
plt.xlabel("time(unit:s)")
plt.ylabel("displacement(unit:m)")
plt.plot(x,y)
plt.show()
最初的例題
謝謝大家 <3
今天的只教比較基本的東西
想了解更多可以上網站去查詢更難的製圖方法
加油!