Python 繪圖庫 Matplotlib 入門代碼實例

使用Matplotlib,能夠輕易生成各種圖像,例如:直方圖、波譜圖、條形圖、散點圖等。

入門代碼實例

	import matplotlib.pyplot as plt
import numpy as np
# 用np.linspace生成50個元素的數組,均勻的分佈在(0,2*pi)區間上面
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
# 把x;y函數畫出來,用黃色的*-線
plt.plot(x, y, "y*-",label="y=sin(x)")
# 把x,y*2函數畫出來,用品紅的--線
plt.plot(x, y * 2, "m--", label="y=2sin(x)")
plt.legend()
# plt.legend(loc="best")
plt.title("sin(x) & 2sin(x)") # 設置標題
plt.xlim(0, 6) # 設置x座標軸的範圍
plt.ylim(-3, 3) # 設置y座標軸的範圍
# 通過xticks或yticks來設置軸的刻度。
plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2))
plt.xlabel("x") # 設置x軸的名稱
plt.ylabel("y") # 設置y軸的名稱
# 展現
plt.show()

代碼解析:

1、通過np.linspace生成50個元素均勻的分佈在[0,2pi]區間的數組,

2、plt.plot(x,y,"線的樣式",label="標記")# 前兩個參數時x,y的取值,第三個參數是線的樣式,第四個參數是右上角的標記,和plt.legend()配套使用

3、plt.title("****)設置標題

4、plt.xlim()或plt.ylim()設置x座標軸或者y座標軸的範圍

5、# 通過xticks或yticks來設置軸的刻度。

6、plt.xlabel("x")設置x軸的名稱

常見的顏色:

藍色:b青色:c紅色:r黑色:k

綠色:g品紅:r黃色:y白色:w

常見的點:

點:.方形:s圓:o像素:,三角形:^

常見的線:

直線:-虛線: - -點線::點劃線:-.星號:*

運行結果如下:

Python 繪圖庫 Matplotlib 入門代碼實例

添加註釋

先上代碼;

	import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.plot(x, y)
x0 = np.pi
y0 = 0
# 畫出標註點
plt.scatter(x0, y0, s=50)
# 右邊的
plt.annotate('sin(np.pi)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30),
textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
# 左邊的
plt.text(0.5, -0.25, "sin(np.pi) = 0", fontdict={'size': 16, 'color': 'r'})
plt.show()
Python 繪圖庫 Matplotlib 入門代碼實例

有時候我們需要對特定的點進行標註,我們可以使用 plt.annotate 函數來實現。

這裡我們要標註的點是 (x0, y0) = (π, 0)。

我們也可以使用 plt.text 函數來添加註釋。

對於 annotate 函數的參數,做一個簡單解釋:

  • 'sin(np.pi)=%s' % y0 代表標註的內容,可以通過字符串 %s 將 y0 的值傳入字符串;
  • 參數 xycoords='data' 是說基於數據的值來選位置;
  • xytext=(+30, -30) 和 textcoords='offset points' 表示對於標註位置的描述 和 xy 偏差值,即標註位置是 xy 位置向右移動 30,向下移動30;
  • arrowprops 是對圖中箭頭類型和箭頭弧度的設置,需要用 dict 形式傳入。

一次性繪製多個圖形

當需要兩組數據進行對比,或者一組數據的不同展示方式,我們就可以在一個窗口中繪製多個圖形。

多個圖形窗口——figure

一個figure就是一個圖形窗口,matplotlib.pyplot會有一個默認的figure,

	import matplotlib.pyplot as plt
import numpy as np
data = np.arange(100, 201) # 生成一組100到200,步長為1的數組
# 在第一個默認窗口畫
plt.plot(data) # 繪製data
data2 = np.arange(200,301)
plt.figure(figsize=(6, 3)) # 生成一個圖形窗口,設置窗口的大小為(6,3)
# 在第二個窗口畫
plt.plot(data2) # 繪製data2
plt.show() # 展現

代碼解析:

1、matplotlib在繪製圖形的時候都在一個默認的figure中。我們可以通過plt.figure()再創建一個窗口

2、plt.figure()有figsize參數,以數組形式控制窗口的大小

運行結果如下:

Python 繪圖庫 Matplotlib 入門代碼實例

多個子圖——subplot

有時候我們需要將多張子圖展示在一起,可以使用 plt.subplot()實現。即在調用plot()函數之前需要先調用 subplot()函數。該函數的第一個參數代表子圖的總行數,第二個參數代表子圖的總列數,第三個參數代表活躍區域。下面綁定了實例,也可以不綁定。

	import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
ax1 = plt.subplot(2, 2, 1) # (行,列,活躍區)
plt.plot(x, np.sin(x), 'r')
ax2 = plt.subplot(2, 2, 2, sharey=ax1) # 與 ax1 共享y軸
plt.plot(x, 2 * np.sin(x), 'g')
ax3 = plt.subplot(2, 1, 2) # 將窗口分為兩行1列,這個圖形佔第二列
plt.plot(x, np.cos(x), 'b')
plt.show()

代碼解析:

1、subplot(2,2,x)表示將圖像窗口分為2行2列。x表示當前子圖所在的活躍區域。

2、subplot(2,1,2)將窗口分為兩行一列,這個圖形畫在第二列

3、plt.subplot(2,2,2,sharey=ax1)# 是與ax1函數共享受一個y軸。

運行結果如下:

Python 繪圖庫 Matplotlib 入門代碼實例

注意;subplot函數的參數不僅僅支持上面的這種形式,還可以將三個整數(10之內的)合併一個整數。例如:plt.subplot(2,2,1)可以寫成plt.subplot(221),結果是一樣的。

常用的圖形實例

Matplotlib可以生成非常多的圖形,常用的有:線形圖、散點圖、餅狀圖、條形圖、直方圖。我們來依次瞭解一下。

線形圖——plot

先上代碼

	import matplotlib.pyplot as plt
plt.plot([1,2,3],[3,6,9], "-r")
plt.plot([1,2,3],[2,4,9], ":g")
plt.show()

代碼解析:

1、plot函數的第一個數組是橫軸的值,第二個數組是縱軸的值,

2、最後一個參數是由兩個字符構成,分別是線條的樣式和顏色。前者是紅色的直線,後者是綠色的點線,關於樣式和顏色的說明請參見plor函數的APIDoc:matplotlib.pyplot.plot

運行結果如下:

Python 繪圖庫 Matplotlib 入門代碼實例

散點圖——scatter

先上代碼:

	import matplotlib.pyplot as plt
import numpy as np
plt.subplot(2,1,1)
k = 500
x = np.random.rand(k)
y = np.random.rand(k)
size = np.random.rand(k) * 50 # 生成每個點的大小
colour = np.arctan2(x, y) # 生成每個點的顏色
plt.scatter(x, y, s=size, c=colour)
plt.colorbar() # 添加顏色欄
N = 20
# 參數c表示點的顏色,s是點的大小,alpha是透明度
plt.subplot(2,3,4)
plt.scatter(np.random.rand(N) * 100,
np.random.rand(N) * 100,
c="r", s=100, alpha=0.5) # 紅色
plt.subplot(2,3,5)
plt.scatter(np.random.rand(N) * 100,
np.random.rand(N) * 100,
c="g", s=200, alpha=0.5) # 綠色
plt.subplot(2,3,6)
plt.scatter(np.random.rand(N) * 100,
np.random.rand(N) * 100,
c="b", s=300, alpha=0.5) # 藍色
plt.show()

代碼解析:

1、這幅圖包含三組數據,每組數據都包含了20個隨機座標的位置

2、參數c表示點的顏色,s是點的大小,alpha是透明度

3、plt.colorbar()添加右邊的顏色欄

運行結果:

Python 繪圖庫 Matplotlib 入門代碼實例

餅狀圖——pie

先上代碼:

	import matplotlib.pyplot as plt
import numpy as np
labels = ["linuxidc", "Ubuntu", "Fedora", "CentOS", "Debian", "SUSE", "linux"]
data = np.random.rand(7) * 100 # 生成7組隨機數
# labels指定標籤,autopct指定數值的精度
plt.pie(data, labels=labels, autopct="%1.1f%%")

plt.axis("equal") # 設置了座標大小一致
plt.legend() # 指明要繪製的圖例
plt.show()

代碼解析:

1、data是一個包含7個數據的隨機數值

2、圖中的標籤通過labels來指定

3、autopct指定了數值的精度格式

4、plt.axis('equal')設置了座標軸大小一致

5、plt.legend()指明要繪製圖例(見下圖的右上角)

運行結果:

Python 繪圖庫 Matplotlib 入門代碼實例

柱形圖——bar

先上代碼:

	import matplotlib.pyplot as plt
import numpy as np
N = 7
x = np.arange(N)
# randint是不是就是去隨機的整數呢
# 柱形的高度隨機生成
data = np.random.randint(low=0, high=100, size=N)
# 隨機生成顏色
colors = np.random.rand(N * 3).reshape(N,-1)
# labels指定了標籤
labels = ["Linux", "Ubuntu", "CentOS", "Fedora", "openSUSE", "Linuxidc.com", "Debian"]
# title指定了圖形的標題,
plt.title("Weekday Data")
# alpha是透明度
plt.bar(x, data, alpha=0.8, color=colors, tick_label=labels)
# 增加數值
for x, y in zip(x, data):
plt.text(x, y , '%.2f' % y, ha='center', va='bottom')
plt.show()

代碼解析:

1、繪製了7個隨機值的高度在[0:100]之間的柱形。

2、colors = np.random.rand(N * 3).reshape(N,-1)表示先生成21(Nx3)個隨機數,然後將他們組裝成7行,那麼每行就是三個數,這對應了顏色的三個組成部分。(這裡7行-1列是什麼意思呀)

3、title是指圖形的標題,labels指定了標籤,alpha是透明度

4、plt.text()標記柱形的數值

運行結果:

Python 繪圖庫 Matplotlib 入門代碼實例

直方圖——hist

直方圖是描述數據中某範圍內數據出現的頻率,

先上代碼:

	import matplotlib.pyplot as plt
import numpy as np
# 生成3組數據

data = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]]
labels = ['3K', '4K', '5K'] # 設置標籤
# 設置數據點
bins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000]
plt.hist(data, bins=bins, label=labels)
plt.legend()
plt.show()

代碼解析:

[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]生成了包含三個數組的列表。

第一個數組包含了3000個隨機數,這些隨機數的範圍是 [0, 3000)

第二個數組包含了4000個隨機數,這些隨機數的範圍是 [0, 4000)

第三個數組包含了5000個隨機數,這些隨機數的範圍是 [0, 5000)

2、bins數組用來指定我們顯示的直方圖的邊界,即:[0, 100) 會有一個數據點,[100, 500)會有一個數據點,以此類推。所以最終結果一共會顯示7個數據點。

運行結果:

Python 繪圖庫 Matplotlib 入門代碼實例

我們看到,三組數據在3000以下都有數據,並且頻度是差不多的。但藍色條只有3000以下的數據,橙色條只有4000以下的數據。這與我們的隨機數組數據剛好吻合。

記得關注小編後私信【學習】領取Python學習教程哦。

Python 繪圖庫 Matplotlib 入門代碼實例


分享到:


相關文章: