Matplotlib新手上路(上)
阿新 • • 發佈:2018-12-30
matplotlib是python裡用於繪圖的專用包,功能十分強大。下面介紹一些最基本的用法:
一、最基本的劃線
先來一個簡單的示例,程式碼如下,已經加了註釋:
import matplotlib.pyplot as plt import numpy as np # 先獲取一個圖表 plt.figure() # 設定圖表的標題 plt.title("sale report") # 設定y軸的label標籤 plt.ylabel("amount") # 設定x軸的label標籤 plt.xlabel("month") # 模擬一些(X,Y)座標資料(注:習慣上用大寫表示矩陣) X = np.arange(0, 13) Y = np.array([100, 200, 200, 300, 400, 600, 500, 550, 600, 700, 800, 750, 800]) # 將x軸的刻度範圍限制為-0.5~12.2 plt.xlim(-0.5, 12.2) # 將y軸的刻度範圍限制為0~1000 plt.ylim(0, 1000) # 將(X,Y)座標用red紅色畫線 plt.plot(X, Y, 'r') # X座標也可以省略,只要Y軸的座標值即可,--表示是虛線 plt.plot(Y + 50, '--') # g+表示green綠色,畫圖的樣式為+號 plt.plot(Y - 50, 'g+') # 同時劃二條線,第1個是yellow黃色,第2個是magenta色,另外還設定了樣式1 plt.plot(Y - 100, 'y', Y - 150, 'm1') # 渲染出來 plt.show()
注:plt中有很多縮寫,比如r代表red,y代表yellow,xlim即x-axis-limit(x軸的限制),另外g+,表示顏色是green,而後面的+號表示劃線的樣式。從原始碼中可以找到更多的縮寫說明。 matplotlib/axes/_axes.py 在這個檔案中,plot方法的註釋裡有相關描述:
1 The following format string characters are accepted to control 2 the line style or marker: 3 4 ================ =============================== 5View Codecharacter description 6 ================ =============================== 7 ``'-'`` solid line style 8 ``'--'`` dashed line style 9 ``'-.'`` dash-dot line style 10 ``':'`` dotted line style 11 ``'.'`` point marker 12 ``','`` pixel marker13 ``'o'`` circle marker 14 ``'v'`` triangle_down marker 15 ``'^'`` triangle_up marker 16 ``'<'`` triangle_left marker 17 ``'>'`` triangle_right marker 18 ``'1'`` tri_down marker 19 ``'2'`` tri_up marker 20 ``'3'`` tri_left marker 21 ``'4'`` tri_right marker 22 ``'s'`` square marker 23 ``'p'`` pentagon marker 24 ``'*'`` star marker 25 ``'h'`` hexagon1 marker 26 ``'H'`` hexagon2 marker 27 ``'+'`` plus marker 28 ``'x'`` x marker 29 ``'D'`` diamond marker 30 ``'d'`` thin_diamond marker 31 ``'|'`` vline marker 32 ``'_'`` hline marker 33 ================ =============================== 34 35 36 The following color abbreviations are supported: 37 38 ========== ======== 39 character color 40 ========== ======== 41 'b' blue 42 'g' green 43 'r' red 44 'c' cyan 45 'm' magenta 46 'y' yellow 47 'k' black 48 'w' white 49 ========== ========
二、繪製數學函式
下面是拋物線、直線、三角函式的演示:
import matplotlib.pyplot as plt import numpy as np # 先獲取一個圖表 fig = plt.figure() # 拋物線 X1 = np.linspace(-5, 5, 50) # -5 ~ 5 之間生成50個點 Y1 = X1 ** 2 + 5 plt.plot(X1, Y1, 'r') # plt.plot(X1, Y1, color='red', label='parabola') # 三角函式 X2 = np.linspace(np.pi, 5 * np.pi, 50) # 在pi ~ 5pi之間生成50個點 Y2 = 6 * np.cos(X2) plt.plot(X2, Y2, 'y') # plt.plot(X2, Y2, color='y', label='cosine') # 直線 X3 = np.linspace(-4, 6, 20) Y3 = 3 * X3 + 10 plt.plot(X3, Y3, 'g--') # plt.plot(X3, Y3, color='green', linestyle='--', label='line') # 顯示圖例說明 # plt.legend() # 渲染出來 plt.show()
注意:程式碼中有一些行被註釋掉了,比如:plt.plot(X1, Y1, color='red', label='parabola') ,這其實是 plt.plot(X1, Y1, 'r') 的完整寫法,其中label只有完整寫法中才能指定。換成完整寫法後,同時把plt.legend() 前面的註釋去掉,再次執行圖上就會顯示出所謂的"圖例"
三、座標軸控制、文字註解顯示
先看效果圖:
程式碼如下:
# coding:utf8 import matplotlib.pyplot as plt import numpy as np # 先獲取一個圖表 fig = plt.figure() # 設定x,y座標軸的刻度顯示範圍 plt.xlim(-7, 7) plt.ylim(0, 7) # 拋物線 X1 = np.linspace(-5, 5, 50) # -5 ~ 5 之間生成50個點 Y1 = 0.25 * X1 ** 2 plt.plot(X1, Y1, color='red', label=r'$y=\frac{x^2}{4}$') # 直線 X2 = np.linspace(-5, 5, 50) Y2 = X2 plt.plot(X2, Y2, color='green', linestyle='--', label=r'$y=x$') # 黑色輔助線 plt.plot([4, 4], [4, 0], "k--") # 拋物線與直線的交點處,標記1個黑點 plt.plot([4, 4], [4, 4], 'ko') # 交點處的文字(annotate方式) plt.annotate(r'$y=\frac{4^2}{4}=4$', xy=(4, 4), xycoords='data', xytext=(+10, -30), textcoords='offset points', fontsize=12, color="red", arrowprops=dict(arrowstyle="->", color="red", connectionstyle="arc3,rad=.5")) # text方式的文字 plt.text(5.2, 6.1, r'$y=\frac{x^2}{4}$', fontdict={'size': 16, 'color': 'r'}) plt.text(5.2, 5.1, r'$y=x$', fontdict={'size': 16, 'color': 'g'}) # 獲取當前座標軸gca即get current axis ax = plt.gca() # 去掉上、右二側的邊框線 ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') # 將左側的y軸,移到x=0的位置 ax.spines['left'].set_position(('data', 0)) # 調整x軸刻度(從-5到+5,正好11個點) plt.xticks(np.linspace(-5, 5, 11)) # 調整y軸刻度 plt.yticks(np.linspace(1, 6, 6)) # 給座標軸加箭頭 plt.arrow(0, 7, 0, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2) plt.arrow(7, 0, 0.01, 0, width=0.2, color="k", clip_on=False, head_width=0.2, head_length=0.2) # 顯示圖例說明 plt.legend() # 顯示 plt.show()
三、散點圖
# coding:utf8 import matplotlib.pyplot as plt # 先獲取一個圖表 fig = plt.figure() # 設定x,y座標軸的刻度顯示範圍 plt.xlim(-5, 20) plt.ylim(-5, 30) # 畫散點圖 X1 = [0, 10] Y1 = [10, 20] # c即color , s即scale plt.scatter(X1, Y1, c='r', s=80, label='scatter 1') plt.scatter([10, 15], [5, 10], c='g', label='scatter 2') # 顯示網格 plt.grid(True, alpha=0.3) # 加上座標說明 plt.text(0.5, 10.5, r'$(0,10)$') plt.text(10.5, 20.5, r'$(10,20)$') plt.text(10.5, 5.5, r'$(10,5)$') plt.text(15.5, 10.5, r'$(15,10)$') # 顯示圖例說明 plt.legend() # 顯示 plt.show()
參考文章:
6、莫煩的視訊