一、坐標軸上下限
使用plt.xlim()
和plt.ylim()
來調整上下限的值:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,100) plt.plot(x,np.sin(x)) plt.xlim(-1,11) plt.ylim(-1.5,1.5)
plt.show()
也可以讓坐標軸逆序顯示,只需要逆序提供坐標軸的限值:
plt.plot(x,np.sin(x)) plt.xlim(11,-1) plt.ylim(1.5,-1.5)
或者使用plt.axis()方法設置坐標軸的上下限(注意區別axes和axis),參數方式是[xmin, xmax, ymin, ymax]
:
plt.plot(x,np.sin(x)) plt.axis([-1,11,-1.5,1.5])
axis的作用不僅於此,還可以按照圖形的內容自動收縮坐標軸,不留空白。此種情況下,x和y軸的限值會自動計算,不用提供:
plt.plot(x,np.cos(x)) plt.axis('tight') # -0.5, 10.5, -1.0993384025373631, 1.0996461858110391)
更多類似的常用設置值有:
- off:隱藏軸線和標簽
- tight:緊縮模式
- equal:以1:1的格式顯示,x軸和y軸的單位長度相等
- scaled: 通過更改繪圖框的尺寸來獲得相同的結果
- square: x軸和y軸的限制值一樣
二、坐標軸刻度
通常情況下,系統會自動根據提供的原始數據,生成x和y軸的刻度標簽。但是很多時候,我們往往需要自定義刻度,讓它符合我們的需要,比如下面的例子:
plt.plot(np.random.randn(1000).cumsum()) plt.show()
我們可以手動提供刻度值,並調整刻度的角度和大小:
plt.plot(np.random.randn(1000).cumsum()) plt.xticks([0,250,500,750,1000],rotation=30, fontsize='large') plt.yticks([-45,-35,-25,-15,0],rotation=30, fontsize='small') plt.show()
三、坐標軸刻度詳解
Matplotlib圖形對象具有層級關系。Figure對象其實就是一個盛放圖形元素的盒子box,每個figure都會包含一個或多個axes對象,而每個axes對象又會包含其它表示圖形內容的對象,比如xais和yaxis,也就是x軸和y軸。
- 主要刻度和次要刻度
每個坐標軸都有主要刻度和次要刻度,主要刻度往往更大或者突出顯示,而次要刻度往往更小,一般不直接顯示。
下面是一個對數坐標軸,可以看到次要刻度:
ax = plt.axes(xscale='log', yscale='log')
我們發現每個主要刻度都顯示未一個較大的刻度線和標簽,而次要刻度都顯示為一個較小的刻度線,並且不現實標簽。
- 隱藏刻度與標簽
如果我們想隱藏刻度或標簽,就要着落在locator和formatter這兩大屬性上了:
ax = plt.axes() x = np.linspace(0,10,100) ax.plot(np.cos(x)) ax.yaxis.set_major_locator(plt.NullLocator()) ax.xaxis.set_major_formatter(plt.NullFormatter()) plt.show()
可以看出,沒有locator,刻度和標簽都會被隱藏起來;沒有formatter,隱藏標簽,但刻度還存在。
- 設置刻度數量
默認情況下,matplotlib會自動幫我們調節刻度的數量,但有時候也需要我們自定義刻度數量:
fig, ax = plt.subplots(4, 4, sharex=True, sharey=True) for axi in ax.flat: axi.xaxis.set_major_locator(plt.MaxNLocator(4)) axi.yaxis.set_major_locator(plt.MaxNLocator(4)) plt.show()