Matplotlib自定義坐標(biāo)刻度的使用示例
雖然matplotlib默認(rèn)的坐標(biāo)軸定位器與格式生成器可以滿足大部分需求,但是并非對每一幅圖都合適。
主次要刻度
學(xué)習(xí)前最好有對matplotlib圖形的對象層級較為了解,例如查看前面的文章。
matplotlib的figure對象是一個盛放圖形元素的包圍盒。可以將每個matplotlib對象都看成是子對象的容器,每個figure都包含axes對象,每個axes對象又包含其他表示圖形內(nèi)容的對象,比如xaxis/yaxis,每個屬性包含構(gòu)成坐標(biāo)軸的線條、刻度和標(biāo)簽的全部屬性。
每一個坐標(biāo)軸都有主次要刻度,主要刻度要比次要刻度更大更顯著,而次要刻度往往更小。
import matplotlib.pyplot as plt import numpy as np ax = plt.axes(xscale='log', yscale='log') plt.show()

可以看到主要刻度都顯示為一個較大的刻度線和標(biāo)簽,而次要刻度都顯示為一個較小的可讀性,不顯示標(biāo)簽。
隱藏刻度與標(biāo)簽
最常用的刻度/標(biāo)簽格式化操作可能就是隱藏刻度與標(biāo)簽了,可以通過plt.NullLocator()和plt.NullFormatter()實現(xiàn)。
示例如下:
ax = plt.axes() ax.plot(np.random.rand(50)) ax.yaxis.set_major_locator(plt.NullLocator()) ax.xaxis.set_major_formatter(plt.NullFormatter()) plt.show()

這里x軸的標(biāo)簽隱藏了但是保留了刻度線,y軸的刻度和標(biāo)簽都隱藏了。有的圖片中都不需要刻度線,比如下面這張包含人臉的圖形:
fig, ax = plt.subplots(5, 5, figsize=(5, 5))
fig.subplots_adjust(hspace=0, wspace=0)
# 從scikit-learn獲取一些人臉照片數(shù)據(jù),(這個scikit-learn庫在之前手寫數(shù)字文章有講)
from sklearn.datasets import fetch_olivetti_faces
faces = fetch_olivetti_faces().images
for i in range(5):
for j in range(5):
ax[i, j].xaxis.set_major_locator(plt.NullLocator())
ax[i, j].yaxis.set_major_locator(plt.NullLocator())
ax[i, j].imshow(faces[10 * i + j], cmap="bone")
plt.show()

花哨的刻度格式
matplotlib默認(rèn)的刻度格式可以滿足大部分的需求。雖然默認(rèn)配置已經(jīng)很不錯了,但是有時候可能需要更多的功能,比如正弦曲線和余弦曲線。
默認(rèn)情況下刻度為整數(shù),如果將刻度與網(wǎng)格線畫在π的倍數(shù)上圖形會更加自然,可以通過設(shè)置一個multipleLocator來實現(xiàn)將刻度放在你提供的數(shù)值倍數(shù)上:
fig, ax = plt.subplots()
x = np.linspace(0, 3 * np.pi, 1000)
ax.plot(x, np.sin(x), lw=3, label='Sine')
ax.plot(x, np.cos(x), lw=3, label='Cosine')
# 設(shè)置網(wǎng)格、圖例和坐標(biāo)軸上下限
ax.grid(True)
ax.legend(frameon=False)
ax.axis('equal')
ax.set_xlim(0, 3 * np.pi)
ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4))
plt.show()

matplotlib還支持用數(shù)學(xué)符號來做刻度,在數(shù)學(xué)表達式兩側(cè)加上美元符號$,這樣就可以方便地顯示數(shù)學(xué)符號和數(shù)學(xué)公式。
可以用plt.FuncFormatter來實現(xiàn),用一個自定義函數(shù)設(shè)置不同刻度標(biāo)簽的顯示:
def format_func(value, tick_number):
# 找到π/2的倍數(shù)刻度
N = int(np.round(2 * value / np.pi))
if N == 0:
return "0"
elif N == 1:
return r"$\pi/2$"
elif N == 2:
return r"$\pi$"
elif N % 2 > 0:
return r"${0}\pi/2$".format(N)
else:
return r"${0}\pi$".format(N // 2)
ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))

格式生成器與定位器
前面已經(jīng)介紹了一些格式生成器和定位器,這里再用表格簡單總結(jié)一些內(nèi)置的格式生成器和定位器:


到此這篇關(guān)于Matplotlib自定義坐標(biāo)刻度的使用示例的文章就介紹到這了,更多相關(guān)Matplotlib自定義坐標(biāo)刻度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python利用matplotlib.pyplot繪圖時如何設(shè)置坐標(biāo)軸刻度
- Python設(shè)置matplotlib.plot的坐標(biāo)軸刻度間隔以及刻度范圍
- Python繪圖Matplotlib之坐標(biāo)軸及刻度總結(jié)
- Matplotlib自定義坐標(biāo)軸刻度的實現(xiàn)示例
- matplotlib如何設(shè)置坐標(biāo)軸刻度的個數(shù)及標(biāo)簽的方法總結(jié)
- 如何利用Python和matplotlib更改縱橫坐標(biāo)刻度顏色
- matplotlib圖例、標(biāo)簽、坐標(biāo)軸刻度的字體設(shè)置方式
- Python3使用matplotlib繪圖時,坐標(biāo)軸刻度不從X軸、y軸兩端開始
相關(guān)文章
Django REST framework內(nèi)置路由用法
這篇文章主要介紹了Django REST framework內(nèi)置路由用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
在keras中對單一輸入圖像進行預(yù)測并返回預(yù)測結(jié)果操作
這篇文章主要介紹了在keras中對單一輸入圖像進行預(yù)測并返回預(yù)測結(jié)果操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Python批量將Word文檔(.doc)轉(zhuǎn)換為.docx格式的完整實現(xiàn)步驟
這篇文章主要介紹了Python批量將Word文檔(.doc)轉(zhuǎn)換為.docx格式的完整實現(xiàn)步驟,文中通過代碼介紹的非常詳細,適用于Windows系統(tǒng),解決了手動轉(zhuǎn)換的低效率和出錯率問題,需要的朋友可以參考下2024-12-12
tensorflow 環(huán)境變量設(shè)置方式
今天小編就為大家分享一篇tensorflow 環(huán)境變量設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
pycharm中dgl安裝報錯FileNotFoundError:Could not find&nb
這篇文章主要介紹了pycharm中dgl安裝報錯FileNotFoundError:Could not find module ‘E:\XXXX\XXXX\lib\site-packages\dgl\dgl.dl問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

