2

プロットする必要があるファイルが 58 個あります。それらのいくつかは空です (重要ではありません。if 条件で既にそれらをスキップしました)。loglog スケールを使用して、エラー バーを使用して、ファイル内のデータをプロットする必要があります。そして、最後にプロットを保存したいと思います。Python、スパイダーを使用しています。私は次のコードを書きました:

route='/......./'
L=np.arange (1,59, 1)
for i in range (L.shape[0]):
    I=L[i]
    name_sq= 'Spectra_without_quiescent_'+('{}'.format(I))+'.dat' 
    Q=np.loadtxt(route+name_sq)
    if (len(Q) != 0):
        x=Q[:,1]
        y=Q[:,2]
        z=Q[:,3]
        fig=plt.errorbar(x,y,yerr=z, fmt = 'b')
        fig.set_yscale('log')
        fig.set_xscale('log')
        xlabel='Frequency'
        ylabel='Flux'
        title='Spectrum_'+('{}'.format(I))+'.dat'
        name='Spectrum_without_quiescent_'+('{}'.format(I))+'.pdf'
        fig.savefig(route+name, fig)

ただし、実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 540, in runfile
    execfile(filename, namespace)
  File "/media/chidiac/My Passport/DOCUMENTS/My_Publications/2-3C273_radio_spectra/Maximum_flux_code.py", line 49, in <module>
    fig.set_yscale('log')
AttributeError: 'ErrorbarContainer' object has no attribute 'set_yscale'

私はまだ Python の初心者であり、エラーやその修正方法を見つけることができませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

-1

私の友人がこの問題で私を助けてくれました。誰かが興味を持っているなら、ここに解決策があります:

route='/....../'
L=np.arange (1,59, 1)
print L 
for i in range (L.shape[0]):
    I=L[i]
    name_sq= 'Spectra_without_quiescent_'+('{}'.format(I))+'.dat' 
    Q=np.loadtxt(route+name_sq)
    if (len(Q) != 0):
        x=np.log(Q[:,1])
        y=np.log(Q[:,2])
        z=np.log(Q[:,3])
        fig, ax = plt.subplots(facecolor='w', edgecolor='k')
    plt.errorbar(x,y,yerr=z, fmt = 'b')
    plt.ylabel('Flux', size='x-large')
    plt.xlabel('Frequency', size='x-large')
    title='Spectrum_'+('{}'.format(I))+'.dat'
    name='Spectrum_without_quiescent_'+('{}'.format(I))+'.pdf'
    pylab.savefig(route+name)

最初のトリックは、まずデータのログ値を取得してからプロットすることでした。エラーバーを対数スケールでプロットできるコマンドを知らないので、これが最善の解決策だと思います。2 番目のトリックは、サブプロットを使用することでした。それ以外の場合は、58 回、1 つのプロットで 58 個の曲線を取得しました。

このソリューションがお役に立てば幸いです。

于 2016-05-18T09:28:49.927 に答える