ループの反復を通じて図のサブプロットを描画する必要があります。各反復は、別のモジュール(=別のpyファイル)で定義された関数を呼び出します。この関数は、サブプロットのペアを描画します。これが私が試したものです-そして悲しいかな、うまくいきません:
1)ループの前に、適切な行数と2列の図を作成します。
import matplotlib.pyplot as plt
fig, axarr = plt.subplots(nber_rows,2)
2)ループ内で、反復番号iter_nberで、各サブプロットを描画する関数を呼び出します。
fig, axarr = module.graph_function(fig,axarr,iter_nber,some_parameters, some_data)
3)問題の関数は基本的に次のようになります。各反復は、同じ行にサブプロットのペアを作成します。
def graph_function(fig,axarr,iter_nber,some_parameters, some_data):
axarr[iter_nber,1].plot(--some plotting 1--)
axarr[iter_nber,2].plot(--some plotting 2--)
return fig,axarr
これは動作しません。ループの終わりに空の図が表示されます。関数のreturn引数にaxarrだけを残すなど、上記のさまざまな組み合わせを試しましたが、役に立ちませんでした。明らかに、私はこの図とそのサブプロットの論理を理解していません。
どんな提案も大歓迎です。
あなたが投稿したコードはおおむね正しいようです。 @hitzgが述べたように、インデックス作成以外に、あなたがしていることは何も異常に見えません。
ただし、プロット関数からFigureとAxesの配列を返すことはあまり意味がありません。 (Figureオブジェクトにアクセスする必要がある場合は、いつでもax.figure
から取得できます。)ただし、それらを渡して返すために何も変更されません。
これは、あなたがやろうとしているように聞こえるタイプの簡単な例です。多分それはいくつかの混乱を取り除くのに役立ちますか?
import numpy as np
import matplotlib.pyplot as plt
def main():
nrows = 3
fig, axes = plt.subplots(nrows, 2)
for row in axes:
x = np.random.normal(0, 1, 100).cumsum()
y = np.random.normal(0, 0.5, 100).cumsum()
plot(row, x, y)
plt.show()
def plot(axrow, x, y):
axrow[0].plot(x, color='red')
axrow[1].plot(y, color='green')
main()