1. 程式人生 > >Matplotlib新手上路(上)

Matplotlib新手上路(上)

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 ================    ===============================
 5
character description 6 ================ =============================== 7 ``'-'`` solid line style 8 ``'--'`` dashed line style 9 ``'-.'`` dash-dot line style 10 ``':'`` dotted line style 11 ``'.'`` point marker 12 ``','`` pixel marker
13 ``'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 ========== ========
View Code

二、繪製數學函式

下面是拋物線、直線、三角函式的演示:

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、莫煩的視訊