Matplotlib在附加轴上的错误位置滴答

问题描述 投票:4回答:2

我希望有一个X轴上部,其刻度线与原始X轴刻度线位于相同的位置(在轴上)(刻度线标签可以不同)。看起来很容易做到,但是我不确定下面的代码为什么不起作用:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)

X = np.linspace(11,80,1000)
Y = 2*np.sin(X)*np.exp(-X/20.)

ax1.plot(X,Y)
ax2 = ax1.twiny()

old_ticks = ax1.get_xticks()
ax2.set_xticks(old_ticks)

plt.show()

输出如下所示:显然,顶部轴上的刻度线与下面的刻度线不在同一位置上(即,顶部轴上的刻度线只有7个,底部只有6个刻度线。] >

为什么会这样?

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS82bUtHRi5wbmcifQ==” alt =“第二个x轴上的偏移滴答声”>

编辑:设置xlim(如下所示)仅在初始绘图中起作用,而在一个人在不同区域放大时则无效。我添加了一个回调函数,以便在放大/缩小时将ax2上的刻度添加到与ax1上相同的位置,但这似乎不起作用。

[另外,我使用twiny的原因是因为最终显示的ax2的报价值将以非线性方式取决于ax1的报价值。我只希望刻度线在轴上的相同位置。导入numpy为np导入matplotlib.pyplot作为plt

fig = plt.figure()
ax1 = fig.add_subplot(111)

X = np.linspace(11,80,1000)
Y = 2*np.sin(X)*np.exp(-X/20.)

ax1.plot(X,Y)
ax2 = ax1.twiny()

ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(ax1.get_xticks())

def on_xlim_changed(ax1):
    ax2.set_xlim(ax1.get_xlim())
    ax2.set_xticks(ax1.get_xticks())

ax1.callbacks.connect('xlim_changed',on_xlim_changed)

plt.show()

我希望有一个X轴上部,其刻度线与原始X轴刻度线位于相同的位置(在轴上)(刻度线标签可以不同)。似乎很容易做到,但我不是...

python matplotlib customization
2个回答
2
投票

尝试:


0
投票

您应使用Locator功能

© www.soinside.com 2019 - 2024. All rights reserved.