我希望能够在图表中添加一个上部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个)。
为什么会这样呢?
编辑:设置xlim(如下面所建议的)仅适用于初始绘图,但不适用于缩放到不同区域时。我添加了一个回调函数,以在缩放时将ax2上的刻度添加到与ax1上的刻度相同的位置,但似乎不起作用。
此外,我使用twiny是因为最终显示的ax2刻度值将以非线性方式取决于ax1刻度值。我只希望刻度在轴上的位置相同。 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()
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()
ax2.set_xlim(ax1.get_xlim()) ax2.set_xticks(ax1.get_xticks())
一些可能有帮助的帖子(也在我的赏金描述中):stackoverflow.com/a/35904761/2542091 stackoverflow.com/a/27344398/2542091 - Aleksander Lidtke