牛刀小試
導(dǎo)入類庫:
import matplotlib.pyplot as plt
畫圖:
plt.plot([1, 2, 3, 4])
如果只提供了一個(gè)參數(shù)給plot()時(shí),默認(rèn)是給y的拆祈,自動生成x恨闪。給圖添加修飾
plt.xlabel('x label') # 橫坐標(biāo)
plt.ylabel('y label') # 縱坐標(biāo)
plt.title('Test') # 標(biāo)題
-
顯示
plt.show()
結(jié)果如圖1所示
圖1.png
接下來,我們改變一些參數(shù)試試:
可以給plot()傳入多個(gè)參數(shù):
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
第一個(gè)列表參數(shù)賦值給x
第二個(gè)列表參數(shù)賦值給y
第三個(gè)參數(shù)“ro”種r
表示顏色放坏,o
表示形狀通過axis()改變坐標(biāo)軸的度量
plt.axis([0, 6, 0, 20])
列表的前兩個(gè)數(shù)表示x軸的范圍咙咽,0~6
列表的后兩個(gè)數(shù)表示y軸的范圍,0~20同樣使用plt.show()顯示圖像
plt.show()
結(jié)果如圖2所示
- 但通用的方法還是給plot()傳入數(shù)組
import numpy as np
array = np.arange(0, 5, 0.1)
plt.plot(array, array**2, 'bs')
結(jié)果如圖3所示
圖3.png
設(shè)置線條屬性
一般有以下幾個(gè)方法設(shè)置線條屬性
- 使用關(guān)鍵字:
plt.plot(x, y, linewidth=2.0)
- 使用plot返回一個(gè)由二維線條對象組成的列表淤年,該對象有一個(gè)setter方法
line, = plt.plot(x, y, '-') # 此處返回的列表長度為1
line.set_antialiased(False) # 設(shè)置antialising屬性為False
- 使用setp()命令钧敞,可以使用關(guān)鍵字標(biāo)注和matlab風(fēng)格的方式
lines = plt.plot(x1, y1, x2, y2) # 返回線條列表,長度為2
plt.setp(lines, color='r', linewidth=2.0) # 使用keyword
plt.setp(lines, 'color', 'r', 'linewidth', 2.0) # matlab風(fēng)格
常用的屬性
多圖和axes
Matplotlib和Matlab一樣麸粮,都有圖和子圖的概念溉苛,圖用figure表示,子圖用axes表示
所有使用plt的操作都是針對當(dāng)前的圖或子圖進(jìn)行的
- gca()可以輸出當(dāng)前的axes
- gcf()可以輸出當(dāng)前的figure
- 下面是一個(gè)多圖多子圖的例子:
x = np.arange(0, 5, 0.1)
plt.figure(1) # 創(chuàng)建了圖1(figure(1))
plt.subplot(211) # 在figure1種生成子圖1
plt.plot(x, np.sin(x)) # 在當(dāng)前子圖弄诲,也就是子圖1種畫圖
plt.subplot(212) # 在figure1中生成子圖2
plt.plot(x, x**2)
plt.figure(2)
plt.subplot(131)
plt.plot(x, x)
plt.subplot(132)
plt.plot(x, 2*x+1)
plt.subplot(133)
plt.plot(x, np.cos(x))
plt.show()
其中:
- 在創(chuàng)建子圖時(shí)使用了
plt.subplot(211)
愚战,其中的211
可以這樣解釋:前兩位數(shù)可以理解為2*1
,也就是在figure1中生成兩個(gè)子圖齐遵,最后一位1
解釋為子圖編號寂玲,也就是figure1中的第一個(gè)子圖 -
211
也可理解為圖的布局為兩行一列的第一個(gè)圖,132
就理解為一行三列的第二副圖
上面程序的運(yùn)行結(jié)果:
-
上面的創(chuàng)建圖和子圖的方法有些麻煩梗摇,有一種更為簡單的方法:
使用plt.subplots
創(chuàng)建新的figure敢茁,返回值為已創(chuàng)建subplot對象的Numpy數(shù)組:
>>>fig, axes = plt.subplots(2, 3)
>>>axes
[[<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940B0D940>
<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940CAC550>
<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940CE5240>]
[<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940D77748>
<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940D88FD0>
<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940E41780>]]
結(jié)果如圖6,在一個(gè)figure中創(chuàng)建了6個(gè)子圖
圖6.pngfigure過度時(shí)會導(dǎo)致內(nèi)存警告
可以使用clg()刪除當(dāng)前figure留美,cla()刪除當(dāng)前的axes plt針對當(dāng)前子圖進(jìn)行操作彰檬,而axes只關(guān)注它本身
使用axes也可以操作子圖
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.arange(1, 5, 0.1)
y = x**3
ax.scatter(x, y)
ax.set_xlabel('x label')
ax.set_ylabel('y label')
plt.show()
結(jié)果如圖7所示
文本工作
- 可以使用text()在任意位置添加文本
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
結(jié)果如圖8所示
- 使用
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
在點(diǎn)(60, 0.025)
處添加了文本u=100, sigma=15
-
plt.grid(True)
表示在圖中添加網(wǎng)格
- 使用annotate()
from numpy import pi
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)
plt.annotate('point(2, 1)', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
plt.ylim(-2,2)
lt.show()
運(yùn)行結(jié)果如圖9所示
使用
plt.annotate('point(2, 1)', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
來進(jìn)行注釋,point(2, 1)', xy=(2, 1)
表示在點(diǎn)(2, 10)
處添加文本"point(2, 1)"
xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05)
表示注釋文本的位置為(3, 1.5)
處谎砾,arrowprops
描述了箭頭
使用文本的方法
- 所有的
test()
方法都會返回一個(gè)matplotlib.text.Text
實(shí)例逢倍,可以使用關(guān)鍵字參數(shù)和setp()的形式使用文本。
t = plt.xlabel('my data', fontsize=14, color='red')
- matplotib可以使用TeX表達(dá)式描述任何文本景图,比如文本
plt.title(r'$\sigma_i=15$')
這里有一些常用的數(shù)學(xué)式表述方式
http://matplotlib.org/users/mathtext.html#mathtext-tutorial
保存到文件
使用plt.savefig()將當(dāng)前圖保存到文件
例如:將figure保存為svg文件较雕,plt.savefig('figpath.svg')
總結(jié)一些自己學(xué)習(xí)的知識點(diǎn),謝謝挚币!