Python實現(xiàn)對數(shù)坐標(biāo)系繪制與自定義映射
對數(shù)坐標(biāo)系
在實際繪圖時,如果x,y這兩軸的數(shù)據(jù)變化速率相差過多,線性的坐標(biāo)映射將無法展示圖形變化的細(xì)節(jié),就需要更改坐標(biāo)系的數(shù)字映射邏輯,以獲得更具細(xì)節(jié)的圖像。
在matplotlib繪圖時,通過set_xscale和set_yscale這兩個函數(shù),可以輕松對坐標(biāo)系進(jìn)行坐標(biāo)放縮,并且提供了4個基礎(chǔ)的放縮模板,分別是’linear’, ‘log’, ‘symlog’, ‘logit’。
import numpy as np import matplotlib.pyplot as plt xs = np.linspace(-5,5,1000) labels = ['linear', 'log', 'symlog', 'logit'] fig = plt.figure() for i,L in enumerate(labels, 1): ax = fig.add_subplot(2,2,i) ax.plot(xs, np.tan(xs)) ax.plot(xs, np.exp(xs)) ax.set_yscale(L) ax.set_title(L) ax.grid() plt.tight_layout() plt.show()
從其y軸坐標(biāo)可以看出,linear就是最常見的線性映射;log是對數(shù)坐標(biāo);symlog是“雙”對數(shù)坐標(biāo);logit則是中間大、兩端小的對數(shù)映射。
所以,在log圖中,由于對數(shù)映射是非對稱的,其y軸坐標(biāo)從小到大依次是0.01,0.1,1,10,100,所以 盡管tanx本應(yīng)上下對稱,但下方卻直接超出了坐標(biāo)軸給定的范圍。
自定義映射
set_xscale和set_yscale這兩個函數(shù),除了支持matplotlib實現(xiàn)好的字符串標(biāo)識之外,還支持自定義函數(shù)映射。例如,想把y軸映射為根號y ?,則需要定義兩個函數(shù),分別用于坐標(biāo)系映射和圖像映射,具體代碼如下
forward = lambda x : x**(1/2) inverse = lambda x : x**2 fig, ax = plt.subplots() xs = np.linspace(0,4,100) ax.plot(xs, np.exp(xs)) ax.set_yscale('function', functions=(forward, inverse)) ax.set_title('function: $x^{1/2}$') ax.grid() plt.tight_layout() plt.show()
繪圖結(jié)果如下
可以看到,y軸方向等間隔的刻度,其映射的長度是依次減半的。10到20在y向的長度,差不多是0到10的二分之一。
對數(shù)坐標(biāo)圖
雖然上面的例程均通過plot圖來演示,但set_xscale和set_yscale其實適用于各種圖像。而針對折線圖的對數(shù)坐標(biāo)圖,matplotlib已經(jīng)實現(xiàn)了更加成熟的封裝,即semilogx, semilogy和loglog。
fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(8,3)) ax1.semilogx(t, np.sin(2 * np.pi * t)) ax1.set(title='semilogx') ax1.grid() ax2.semilogy(t, np.exp(-t / 5.0)) ax2.set(title='semilogy') ax2.grid() ax3.loglog(t, 20 * np.exp(-t / 10.0)) ax3.set(title='loglog') ax3.grid() plt.tight_layout() plt.show()
結(jié)果為
其中,semilogx和semilogy顧名思義,分別是對x軸和y軸進(jìn)行坐標(biāo)映射,而log則對兩個軸都進(jìn)行了坐標(biāo)映射。
到此這篇關(guān)于Python實現(xiàn)對數(shù)坐標(biāo)系繪制與自定義映射的文章就介紹到這了,更多相關(guān)Python對數(shù)坐標(biāo)系內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python numpy linspace函數(shù)使用詳解
本文介紹了Python Numpy庫中的linspace函數(shù),該函數(shù)用于生成均勻分布的數(shù)值序列,通過示例和詳細(xì)參數(shù)解釋,幫助讀者理解如何使用linspace函數(shù),最后,對比了linspace和arange函數(shù)之間的主要差異,感興趣的朋友跟隨小編一起看看吧2024-12-12