十分鐘快速學會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的地方加一條水平線