0

APLpy を使用してフィット画像の複数のサブプロットを作成しようとしています。N プロットに対して数十のパラメーターを複数回入力する必要がないように、for ループを介してこれらを作成できるようにしたいと考えています。

洗練されていない力ずくの方法を使用すると、N=2 プロットの場合、次のようになります。

import aplpy
import matplotlib.pyplot as plt

fig = plt.figure()
f1 = aplpy.FITSFigure("figure1.fits", figure=fig, subplot=[0,0,0.5,0.5])
f2 = aplpy.FITSFigure("figure2.fits", figure=fig, subplot=[0.5,0.5,0.5,0.5])
# And there are many more images at this point, but let's look at 2 for now.

f1.show_colorscale()
f1.add_colorbar()
f1.frame.set_linewidth(0.75)
# And many more settings would follow

# Repeat this all again for the second plot
f2.show_colorscale()
f2.add_colorbar()
f2.frame.set_linewidth(0.75)

fig.canvas.draw()
fig.savefig('figure.eps')

しかし、他のプロット パラメータの多くがこの方法で制御されているため、2 セットのプロット パラメータを for ループに置き換えて、さらにいくつかのプロットを実行したいと考えています。これらの行を次のようなものに置き換えたいと思います:

for i in range(1,3):
    f{i}.show_grayscale()
    f{i}.add_colorbar()
    f{i}.frame.set_linewidth(0.75)

明らかに、この構文は間違っています。基本的に、for ループでコード自体を変更できる必要があります。Python でこれを行う方法を見つけることができませんが、.csh で同様のことを行う場合は、例えば f"$i".show_grayscale().

ありがとう。

4

2 に答える 2

-1

今日はこれを解決する方法を教えてもらいました。このexec()コマンドを使用すると、まさにこの方法で一連のコードを実行できます。この特定のケースの解決策は、次を使用することです。

for i in range(1,3):
    exec('f' + str(i) + '.show_grayscale()')
    exec('f' + str(i) + '.add_colorbar()')
    exec('f' + str(i) + '.frame.set_linewidth(0.75)')

ここでの欠点は、実行する文字列内に記述したコードが、通常は色分けされた書式設定を持たないことです。

于 2015-04-17T14:31:34.837 に答える