3

matplotlib imshow()プロットに2つの依存関係のないx軸を設定しようとしています。下のx軸は半径の二乗で、上は半径だけにします。私はこれまで試しました:

ax8 = ax7.twiny()
ax8._sharex = ax7
fmtr = FuncFormatter(lambda x,pos: np.sqrt(x) )
ax8.xaxis.set_major_formatter(fmtr)
ax8.set_xlabel("Radius [m]")

ここで、ax7はy軸と下部のx軸(または半径の2乗)です。上部の目盛りとしてsqrt(x_bottom)を取得する代わりに、0から1の範囲を取得します。これを修正するにはどうすればよいですか?

よろしくお願いします。

4

1 に答える 1

5

あなたは何をするのか誤解して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()

このプロットと前のプロットはどちらも最初は同じように見えます。プロットを操作(ズーム/パンなど)すると、違いが明らかになります。

于 2012-12-08T19:56:22.177 に答える