你误解了什么twiny
。它形成了一个完全独立的 x 轴和一个共享的 y 轴。
您想要做的是使用带有链接轴的不同格式化程序(即共享轴限制但仅此而已)。
执行此操作的简单方法是手动设置孪生轴的轴限制:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
fig, ax1 = plt.subplots()
ax1.plot(range(10))
ax2 = ax1.twiny()
formatter = FuncFormatter(lambda x, pos: '{:0.2f}'.format(np.sqrt(x)))
ax2.xaxis.set_major_formatter(formatter)
ax2.set_xlim(ax1.get_xlim())
plt.show()
但是,一旦您缩放或与绘图交互,您就会注意到轴未链接。
您可以使用共享的 x 和 y 轴在相同位置添加一个轴,但是刻度格式化程序也被共享。
因此,最简单的方法是使用寄生轴。
举个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
from mpl_toolkits.axes_grid1.parasite_axes import SubplotHost
fig = plt.figure()
ax1 = SubplotHost(fig, 1,1,1)
fig.add_subplot(ax1)
ax2 = ax1.twin()
ax1.plot(range(10))
formatter = FuncFormatter(lambda x, pos: '{:0.2f}'.format(np.sqrt(x)))
ax2.xaxis.set_major_formatter(formatter)
plt.show()
这和之前的情节一开始看起来都是一样的。当您与绘图交互(例如缩放/平移)时,差异将变得明显。