機器學習之numpy和matplotlib學習(四)

weixin_33860722發表於2017-06-30

之前我們學習的都是怎麼在一個程式裡面繪製多張影像,每張影像只有一個座標軸。
可不可以在一張影像裡面有多個座標軸,每個座標軸裡面可以繪畫不同的曲線。
當然可以,今天我們來學習plt.subplot( )函式的使用。參看官方文件http://matplotlib.org/users/pyplot_tutorial.html
先來說一下這個函式plt.subplot( )它與plt.plot( )相差了一個sub。sub的英文意思是子分塊。
先來講一下程式碼:

#plt.plot()函式裡面有兩個陣列,第一個陣列是x的取值,第二個陣列是y的取值。
#後面的‘ro’代表繪製出來的是圓點而不是一條直線。
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
#plt.axis()函式是繪製時候x和y的取值範圍,這裡x是【0到6】,y是【0到20】
plt.axis([0, 6, 0, 20])

對上面講解的完整演示程式碼如下:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

結果如下:


4838998-654957a8d9317819
這裡寫圖片描述

這裡補充兩點
1.我們知道plt.axis()函式是繪製時候x和y的取值範圍,這裡x是【0到6】,y是【0到20】
也可以分別設定x和y的繪製時候的取值範圍:

#對x設定繪製時候的取值範圍。
plt.xlim(0,6)
#對x設定繪製時候的取值範圍。
plt.ylim(0,20)
#等價於plt.axis([0, 6, 0, 20])

2 .我們之前的plt.plot([1,2,3,4], [1,4,9,16], 'ro')中傳入了兩組資料,如果只傳入一組資料的話,預設為y的資料。
實踐如下:

import matplotlib.pyplot as plt
plt.plot([1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

結果如下:


4838998-1b983f2ac10ee869
這裡寫圖片描述

可以看到是有差別的。
下面學習一下:subplot(numRows, numCols, plotNum)。
圖表的整個繪圖區域被分成numRows行和numCols列。
plotNum引數指定建立的影像物件所在的區域。
如:(2,2,1)相當於把一個figure分成一個2x2的網格佈局。plotNum等於1,也就是繪製的影像是網格佈局的第一塊區域。
程式碼演示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : SundayCoder-俊勇
# @File    : figure3.py

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-5,5,50)
y1=2*x+1
y2=x*x
y3=x*x+2*x
y4=x+1

plt.figure()
# 第一個子圖
plt.subplot(2,2,1)
plt.plot(x,y1)
plt.title("first subplot")
# 第二個子圖
plt.subplot(2,2,2)
plt.plot(x,y2)
plt.title("second subplot")
# 第三個子圖

plt.subplot(2,2,3)
plt.plot(x,y3)
plt.title("third subplot")
# 第四個子圖
plt.subplot(2,2,4)
plt.plot(x,y4)
plt.title("Fourth subplot")

plt.show()


結果:


4838998-9ce7ef4f5a318f78
這裡寫圖片描述

學習完畢
這裡補充一點。例如,plt.subplot(2,2,4)沒有逗號分隔也可以的。
可以變成plt.subplot(2,2,4)
你試一下??
一樣可以,但是如果數字大於10的話就必須使用逗號分隔。
一般我們用的最多的分隔是2*2網格,分割多了影像太小不好觀察,到後面機器學習如果用到的話一般都是2x2分割佈局。

更新完畢

相關文章