あなたは何をするのか誤解してtwiny
います。これは、共有されたy軸を持つ完全に独立したx軸を作成します。
あなたがしたいのは、リンクされた軸を持つ別のフォーマッタを持っていることです(つまり、軸の制限を共有していますが、他には何もありません)。
これを行う簡単な方法は、双晶軸の軸制限を手動で設定することです。
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()
このプロットと前のプロットはどちらも最初は同じように見えます。プロットを操作(ズーム/パンなど)すると、違いが明らかになります。