matplotlib 将左xlim设置为1时,“轴限值不能为NaN或Inf”

ifmq2ha2  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(282)

我正在使用matplotlib的辅助轴教程:

fig, ax = plt.subplots()
ax.plot(range(1, 360, 5), range(1, 360, 5))
ax.set_xlabel('frequency [Hz]')

def invert(x):
    # 1/x with special treatment of x == 0
    x = np.array(x).astype(float)
    near_zero = np.isclose(x, 0)
    x[near_zero] = np.inf
    x[~near_zero] = 1 / x[~near_zero]
    return x

ax.set_xlim(left=1,right=360)
ax.set_xticks(np.linspace(0,360,10))
secax = ax.secondary_xaxis('top', functions=(invert, invert))
secax.set_xticks(1/np.linspace(1,360,5))
secax.set_xlabel('Period [s]')
#secax.set_xscale('log')
plt.show()

当我设置slim left=1时,出现以下错误:

ValueError: Axis limits cannot be NaN or Inf

我通过将x_lim改为:

ax.set_xlim(right=360)

右边的图是创建的:

bjp0bcyl

bjp0bcyl1#

我不完全确定为什么,但您可以通过将ax.set_xlim(left=1,right=360)直接放在plt.show()之前来修复此错误。
显然,这使得计算顶部轴的所有属性变得更加平滑。或者,它可以为底部x轴的左极限选择负值,例如-1。这些极限的默认值是ax.get_xlim()-->(-16.75,373.75)。
最好的,莎拉

相关问题