1. 程式人生 > >Python教程:進擊機器學習(四)--Matplotlib

Python教程:進擊機器學習(四)--Matplotlib

介紹

Matplotlib是Python庫中最經常用來繪製圖的,它可以快速的視覺化你的資料,並且匯出不同的格式。用Matplotlib繪製的圖可以達到出版書籍和論文的質量要求。我們開始探索在處理一些常見的資料時應用Matplotlib。

pyplot

Matplotlib繪製圖主要要用到它的pyplot模組,pyplot的用法和引數都很像Matlab,所以用過Matlab製圖的對這個模組應該很快就會得心應手。我們只需把這個模組匯入就可以使用了,我們一般設定別名為plt。

from matplotlib import pyplot as plt

簡單的繪圖

比如我們畫一個cos函式和sin函式:
首先獲取cos和sin的數值,使用numpy來取樣一個週期的值(-π 到 π,取256個值):

import numpy as np
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)

然後通過pyplot將兩個函式圖畫出來(使用預設引數):

import matplotlib.pyplot as plt
plt.plot(X, C)
plt.plot(X, S)
plt.show()

cos函式和sin函式

當然你也可以自己設定引數:

import numpy as np
import matplotlib.pyplot as plt
# 設定影象大小為8x6, 畫素密度為80
plt.figure(figsize=(8
, 6), dpi=80) # 建立子圖,1x1,在第一個位置,建立子圖要在plot.plot()前面 plt.subplot(1, 1, 1) X = np.linspace(-np.pi, np.pi, 256, endpoint=True) C, S = np.cos(X), np.sin(X) #用藍色的線,寬度為1.0來繪製cos函式 plt.plot(X, C, color="blue", linewidth=1.0, linestyle="-") #用綠色的線,寬度為1.0來繪製sin函式 plt.plot(X, S, color="green", linewidth=1.0, linestyle="-"
) #設定x軸的上下限 plt.xlim(-4.0, 4.0) #設定x軸的座標 plt.xticks(np.linspace(-4, 4, 9, endpoint=True)) # Set y limits plt.ylim(-1.0, 1.0) # Set y ticks plt.yticks(np.linspace(-1, 1, 5, endpoint=True)) #儲存圖片,畫素密度為72 # plt.savefig("exercice_2.png", dpi=72) #在螢幕上顯示出來 plt.show()

你可以隨意改變線的屬性(風格,大小和顏色),X軸和Y軸的範圍和座標。具體引數可以參考http://matplotlib.org/api/

改變座標位置:

ax = plt.gca()  # 獲取存在的軸心位置
#調整座標軸的位置
...
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
...

新增圖例(新增label引數,並使用plt.legend()來選擇圖例的位置):

...
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red",  linewidth=2.5, linestyle="-", label="sine")
plt.legend(loc='upper left')
...

其他繪圖展示

條形圖:

條形圖

n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x, y in zip(X, Y1):
    plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
plt.ylim(-1.25, +1.25)

離散圖:

image.png

n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
plt.scatter(X,Y)

以上都是比較常見常用的繪圖。當然Matplotlib的功能可不止這麼多,它甚至連3d影象都能繪製:

image.png