set_position()後のmatplotlib twinxの奇妙な動作

2020-07-01 python matplotlib plot twinx

プロット上のどこにでも寄生軸を簡単に追加できる関数を開発していますが、奇妙な状況に遭遇しました。次のコードを見てください。

import matplotlib.pyplot as plt

plt.plot()
plt.gca().set_position([1/3, 1/3, 1/3, 1/3])
plt.gca().twinx()

plt.show()

上記のコードは、次の図を生成します。 ここに画像の説明を入力してください

ご覧のとおり、twinxプロットは、ホストプロットの古い位置を使用して生成されています。ホストプロットの新しい位置にtwinxプロットが生成されることを期待していました。

ホストプロットの新しい位置にTwinxプロットを描画するにはどうすればよいですか? ( 私はあらかじめtwinxプロットを描くことでこれを「解決」することを知っていますが、実際的な解決策ではありません

ご協力いただきありがとうございます!

Answers

私は試行錯誤によって問題を回避する方法を見つけました。ただし、私はtwinxどのようにtwinxするかtwinxず、matplotlibの初心者であるため、何が起こっているのかを完全に理解することはできません。

これを解決するために行ったのは、twinkを作成する前にplt.gcf().subplots_adjust()を使用したことです。ただし、これを行うと、新しい位置が効果的に破棄されるため、 twinx作成した後に再度適用できるように、事前にそれらを保存しました。コードは次のようになります。

import matplotlib.pyplot as plt

plt.plot()
plt.gca().set_position([1/3, 1/3, 1/3, 1/3])
pos = plt.gca().get_position()     #added line
plt.gcf().subplots_adjust()        #added line
plt.gca().twinx()
plt.gca().set_position(pos)        #added line

plt.show()

私はまだ私よりも良い答えをいくつか読んでいますので、自由に提案してください!

:上記のコードはかなり馬鹿げているように見えます(位置をリセットして後で再適用するために位置を設定しています)、実際のアプリケーションでは、最初のset_positionは以前の関数呼び出しとその後の関数呼び出しによって実行されていますtwinxを追加する必要があるため、これにはユースケースがあります。

Related