十分鐘快速學會Matplotlib基本圖形操作
- 2019 年 10 月 3 日
- 筆記
在學習Python的各種工具包的時候,看網上的各種教程總是感覺各種方法很多很雜,參數的種類和個數也十分的多,理解起來需要花費不少的時間。
所以我在這裡通過幾個例子,對方法和每個參數都進行詳細的解釋,這樣對於0基礎的人也可以快速的掌握Matplotlib基本圖形操作。
- 首先導入numpy和matplotlib包
import numpy as np import matplotlib.pyplot as plt %matplotlib inline # 使圖形可以直接在notebook上顯示
- 首先畫一個最基本的圖形
plt.plot([1,2,3,4,5],[1,4,9,16,25]) # plot方法是繪製圖形,第一個參數是x軸的值,第二個參數是對應的y軸的值 plt.xlabel('this is x-axis',fontsize = 16) #xlabel是指定x軸的名字 fontsize是指定字體的大小 plt.ylabel('this is y-axis',fontsize = 16)
- 不同類型的線條的字元參數;不同顏色的字元參數
- 給plot方法傳入指定的線條和顏色參數
plt.plot([1,2,3,4,5],[1,4,9,16,25],'gv') #其中‘gv’中的g代表green綠色,v代表下三角形 plt.xlabel('xlabel',fontsize = 16) plt.ylabel('ylabel',fontsize = 16)
- 除了上面這種給參數的方法外,還可以分開來給參數
plt.plot([1,2,3,4,5],[1,4,9,16,25],'+',color='r') # 其中的‘+’代表加號點,r代表red紅色 plt.xlabel('xlabel',fontsize = 16) plt.ylabel('ylabel',fontsize = 16)
- 下面我們來繪製多條線
tang_numpy = np.arange(0,10,0.5) # 生產從0到10間隔為0.5的等差序列 # 然後連續繪製三條線,調用三次plot方法 plt.plot(tang_numpy,tang_numpy,'r--') plt.plot(tang_numpy,tang_numpy*2,'bs') plt.plot(tang_numpy,tang_numpy*3,'go')
- 也可以只使用一次plot方法繪製三條線,得到的結果是一樣的
plt.plot(tang_numpy,tang_numpy,'r--', tang_numpy,tang_numpy*2,'bs', tang_numpy,tang_numpy*3,'go')
- 接下來繪製一個餘弦函數,給定比較多的參數,注釋會解釋每個參數的作用
x = np.linspace(-10,10) #線條的範圍 y = np.sin(x) # linewidth參數是線條的寬度,color是顏色,linestype是線條的類型,marker是標記的類型,makercolor是標記的顏色,markersize是標記大小,alpha是透明度 plt.plot(x,y,linewidth=5, color='b',linestyle='-',marker = 'o',markerfacecolor='r',markersize = 8,alpha = 0.4)
- 子圖,一個圖形中可以由多個子圖組合而成,可以吧一整個圖看成是一個矩陣,而其中的子圖是該矩陣的各個元素
# 211 表示一會要畫的圖是2行一列的 最後一個1表示的是子圖當中的第1個圖 plt.subplot(211) plt.plot(x,y,color='r') # 212 表示一會要畫的圖是2行一列的 最後一個1表示的是子圖當中的第2個圖 plt.subplot(212) plt.plot(x,y,color='b')
# 211 表示一會要畫的圖是1行2列的 最後一個1表示的是子圖當中的第1個圖 plt.subplot(121) plt.plot(x,y,color='r') # 212 表示一會要畫的圖是1行2列的 最後一個1表示的是子圖當中的第2個圖 plt.subplot(122) plt.plot(x,y,color='b')
# 321 表示一會要畫的圖是3行2列的 最後一個1表示的是子圖當中的第1個圖 plt.subplot(321) plt.plot(x,y,color='r') # 321 表示一會要畫的圖是3行2列的 最後一個4表示的是子圖當中的第4個圖 plt.subplot(324) plt.plot(x,y,color='b')
- 給圖加上一些文字注釋
plt.plot(x,y,color='b',linestyle=':',marker = 'o',markerfacecolor='r',markersize = 10) plt.xlabel('x:---') plt.ylabel('y:---') plt.title('this is the title:---') plt.text(0,0,'this is the text') #(0,0)是text的位置 plt.grid(True) #這個是網格 # xy是箭頭指向的位置,xytext是注釋的位置,arrowprops是指定箭頭的屬性 plt.annotate('tangyudi',xy=(-5,0),xytext=(-2,0.3),arrowprops = dict(facecolor='red',shrink=0.05,headlength= 20,headwidth = 20))
- 設置圖片的風格
x = np.linspace(-10,10) y = np.sin(x) plt.style.use('dark_background') #給圖片指定風格 plt.plot(x,y)
- 繪製柱狀圖
np.random.seed(0) #設置隨機數種子 x = np.arange(5) y = np.random.randint(-5,5,5) fig,axes = plt.subplots(ncols = 2) # 有兩列的子圖 v_bars = axes[0].bar(x,y,color='blue') #axes[0]代表第一個子圖 h_bars = axes[1].barh(x,y,color='red') axes[0].axhline(0,color='grey',linewidth=2) #加一條橫線 axes[1].axvline(0,color='grey',linewidth=2) #加一條豎線
fig,ax = plt.subplots() v_bars = ax.bar(x,y,color='lightblue') # 讓值小於0的柱狀顏色為green for bar,height in zip(v_bars,y): # bar,height為柱狀的高度值 if height < 0: bar.set(edgecolor = 'darkred',color = 'green',linewidth = 3) ax.axhline(0,color = 'red') # 0的地方加一條水平線