1 回答

TA貢獻1780條經驗 獲得超1個贊
問題在于,對于略微超出給定 x 值范圍的值,同時調用正向函數和反函數。例如,它們用于 xlims。(可以在這些函數中添加一個,看看它們是如何被調用的。print(x)
如果將這些函數編寫為簡單的線性變換(如示例中所示),則沒有問題。該函數在其邊界之外同樣工作。但是 a 在其范圍之外沒有很好的線索,因此它返回其下限或上限。這種截止會導致不需要的蜱蟲標簽。deg2radnp.interp
對于零件,這可以通過設置緊密的x軸來補救,因此沒有默認發(fā)生的填充:
plt.autoscale(enable=True, axis='x', tight=True)
但即便如此,400的不受歡迎的蜱蟲也會彈出。
更好的解決方案是使兩個函數的范圍比舊 x 軸上顯示的限制(包括填充)稍寬。例如,設置
xold = np.linspace(x[0]-0.5, x[-1]+0.5, 100)
xnew = xold * 180 / np.pi
請注意,在鏈接的示例中,他們設置了 ,但隨后僅從第三個索引開始執(zhí)行繪圖,以便為填充創(chuàng)建足夠的空間:。xold = np.arange(0, 11, 0.2)ax.plot(xold[3:], xnew[3:])
完整的示例可能如下所示:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(constrained_layout=True)
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x)
ax.plot(x, y)
xold = np.linspace(x[0]-0.5, x[-1]+0.5, 100)
xnew = xold * 180 / np.pi
def forward(x):
return np.interp(x, xold, xnew)
def inverse(x):
return np.interp(x, xnew, xold)
secax = ax.secondary_xaxis('top', functions=(forward,inverse))
plt.show()
添加回答
舉報