【Tensorflow】輔助工具篇——matplotlib介紹(上)
阿新 • • 發佈:2019-01-25
期待已久的一章!資料視覺化,資料圖表分析,paper畫圖神器,matplotlib登場了
因為有太多可講,我們分成幾篇來詳細介紹,如果你想發paper,學好這個,如果你要做工程,那更要學好這個,總的來說,視覺化圖表繪製工具是必須要熟練使用的。
有人可能會說Tensorflow不是有tensorboard來訓練視覺化嗎?tensorboard所記錄的資料的資料對於我們分析是遠遠不夠的,很多指標用tensorboard難以記錄下來。
下載matplotlib:
sudo pip install matplotlib
matplotlib中的pyplot提供了類似於Matlab畫圖的介面,可用於簡單的繪製,一般基本的繪圖pyplot就可以滿足所有要求。匯入matplotlib:
import matplotlib.pyplot as plt
一.基本繪圖
首先介紹一下基本繪圖plt.plot
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linestyle='-', color='red')
plt.plot(x, np.cos(x), linestyle='--', color='green')
plt.show()
用numpy生成一組值,然後用plot函式繪製sin和cos函式,後面可以接各種引數,舉個例子‘-’表示實線,‘--’表示虛線,color代表不同顏色,非常形象。
用savefig來儲存圖表,plt.figure產生一張圖的例項。後面再在圖上繪製。但是有一點要注意,先show再儲存是會報錯的。
fig = plt.figure()
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), '-')
plt.plot(x, np.cos(x), '--')
#plt.show() 先show再儲存會報錯
fig.savefig('my_figure.png')
plt.show()
用subplot來產生子圖,子圖都是在一個figure裡面
plt.figure() # create a plot figure # 產生兩個子圖,繪製第一個 plt.subplot(2, 1, 1) # (行, 列, 第幾個子圖) plt.plot(x, np.sin(x)) # 繪製第二個 plt.subplot(2, 1, 2) plt.plot(x, np.cos(x))
還可以採用如下方式:
# 產生figure和子圖,分別傳到兩個變數中
fig, ax = plt.subplots(2)
# 分別根據索引來繪製
ax[0].plot(x, np.sin(x))
ax[1].plot(x, np.cos(x))
除此之外,我們還可以調整座標軸的範圍。
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5)
#或者
#plt.plot(x, np.sin(x))
#plt.axis([-1, 11, -1.5, 1.5])
在圖上可以打一些標記:
plt.plot(x, np.sin(x))
plt.title("A Sine Curve")
plt.xlabel("x")
plt.ylabel("sin(x)")
也可以直接在子圖上設定,更加快捷:
ax = plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),
xlabel='x', ylabel='sin(x)',
title='A Simple Plot')
二.點圖
點圖的繪製也是通過plot函式,只需要將‘-’改成‘.’即可
x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.plot(x, y, '.', color='black')
當然點的樣式和形狀大小都是可以改變的,我們可以通過引數來控制。
matplotlib用scatter函式繪製散點圖,散點圖用的比較多,它允許我們繪製不規則的多個點,引數color和size控制顏色和大小,如下:
rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3)
三.柱狀圖
matplotlib用hist函式來繪製柱狀圖,給出一個具體的例項:
plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6])
plt.show()
只有兩句話,但是裡面的引數需要詳細解釋一下,bins表示一些間隔,柱狀圖的繪製其實是一個統計的過程,例如0-10這個區間,落入的資料是幾個,那麼縱座標就顯示幾,weights則表示每個區間的權重。
ok,介紹完了三種圖表的繪製,我們其實可以幹很多事了,例如散點圖可以做低維流形的視覺化,而二維柱狀圖則可以做概率密度的視覺化,具體怎麼做,到下篇詳述。