1. 程式人生 > >【Tensorflow】輔助工具篇——matplotlib介紹(上)

【Tensorflow】輔助工具篇——matplotlib介紹(上)

期待已久的一章!資料視覺化,資料圖表分析,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,介紹完了三種圖表的繪製,我們其實可以幹很多事了,例如散點圖可以做低維流形的視覺化,而二維柱狀圖則可以做概率密度的視覺化,具體怎麼做,到下篇詳述。