Python教程:進擊機器學習(四)--Matplotlib
阿新 • • 發佈:2018-12-30
介紹
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()
當然你也可以自己設定引數:
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)
離散圖:
n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
plt.scatter(X,Y)
以上都是比較常見常用的繪圖。當然Matplotlib的功能可不止這麼多,它甚至連3d影象都能繪製: