5

mpl_toolkits.axes_grid1 の host_subplot を使用して、対数軸と線形軸の 2 つの y 軸でプロットを作成しようとしています。Figure の内側で、セカンダリ Y 軸 (右) のマイナー ティックがプライマリ Y 軸 (左) にも表示されていることを除いて、Figure は問題ないように見えます。

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA

host = host_subplot(111)
host.set_yticks(np.arange(-12, -3, 1.0))

par1 = host.twinx()
par1.set_ylim( 2.7040e+3, 1.3552e+7)
par1.set_yscale('log')

minorLocator_x1 = MultipleLocator(0.3333)
minorLocator_y1 = MultipleLocator(0.5)
host.xaxis.set_minor_locator(minorLocator_x1)
host.yaxis.set_minor_locator(minorLocator_y2)

プロットは次のようになります。 右の y 軸の目盛りが左の y 軸にどのように反映されているかを確認できます。

次を使用して、ミラーリングされた副対数軸の目盛りを修正できます。

host = host_subplot(111, axes_class=AA.Axes)

ただし、これは別の問題を引き起こします。つまり、x 軸の目盛りラベルが Figure の内側に表示されるのと同じように、x 軸の目盛りラベルも表示されます。

手動でオフセットしようとしても、x ラベルは移動しません。

問題を回避する方法についてのアイデアはありますか?

4

1 に答える 1

1

問題を解決する回避策を見つけましたが、mpl_toolkits.axes_grid1 の host_subplot を使用する方法ではありません。代わりに、次のように matplotlib 軸を使用します。

fig, ax1 = plt.subplots()

ax1.set_xlim(-0.25, 5.1)
ax1.set_ylim(-3.75, -13)
ax2=ax1.twinx()

ax1.set_xlabel('X-label', fontdict=font)
ax1.set_ylabel('Y1-label$', rotation='horizontal', fontdict=font)
ax2.set_ylabel('Y2-label', rotation='horizontal', fontdict=font)

ax2.set_ylim(2.7040e+3,  1.3552e+7)
ax2.set_yscale('log')
ax1.set_yticks(np.arange(-12, -3, 1.0))

ml = MultipleLocator(0.5)
minorLocator = MultipleLocator(0.3333)
ax1.xaxis.set_minor_locator(minorLocator)
ax1.yaxis.set_minor_locator(ml)

これにより、正しいプロットが生成されます。以前の問題は、最初のケース(host_subplotでaxes_class = AA.Axesを使用せずに)の目盛り(set_minor_locator)のあいまいな割り当てであったようです。

于 2014-06-23T11:57:35.837 に答える