1 回答
TA贡献1780条经验 获得超1个赞
问题在于,对于略微超出给定 x 值范围的值,同时调用正向函数和反函数。例如,它们用于 xlims。(可以在这些函数中添加一个,看看它们是如何被调用的。print(x)
如果将这些函数编写为简单的线性变换(如示例中所示),则没有问题。该函数在其边界之外同样工作。但是 a 在其范围之外没有很好的线索,因此它返回其下限或上限。这种截止会导致不需要的蜱虫标签。deg2radnp.interp
对于零件,这可以通过设置紧密的x轴来补救,因此没有默认发生的填充:
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
请注意,在链接的示例中,他们设置了 ,但随后仅从第三个索引开始执行绘图,以便为填充创建足够的空间:。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()

添加回答
举报
