0

1 つのフォルダーに多数のバイナリ ファイルと ASCII ファイルがあります。globモジュールを使用してそれらを読んでいます。プロットできるように、バイナリ データの処理を行います。最後に、単純化されたバイナリ データを 1 つのサブプロットにプロットし、通常の ascii ファイルを別のサブプロットにプロットしようとしています。私が直面している問題は、対応するバイナリ ファイルのプロットを生成できることです。ただし、ASCII ファイルの場合は、以前のファイルを上書きするだけで、常に同じプロットが生成されます。例のコードの簡略版を次に示します。

import glob 
import numpy as np
from struct import unpack
import matplotlib.pyplot as plt

chi = sorted(glob.glob('C:/Users/Desktop/bin/*.chi'))

for index,fh in enumerate(chi):
    data = np.genfromtxt(fh, dtype = float)
    x = [row[0] for row in data]
    y = [row[1] for row in data]

binary = sorted(glob.glob('C:/Users/Desktop/bin/*.bin'))

for count,FILE in enumerate(binary):
    F = open(FILE,'rb')
    B = unpack('f'*1023183, F.read(4*1023183))
    A = np.array(B).reshape(1043, 981)
    F.close()

    #a = something column 1   # some further processing
    #b =  something column 2  # and generates 1D data

    fig = plt.figure(figsize=(11, 8.0))

    ax1 =fig.add_subplot(211,axisbg='w')
    ax1.plot(a,b)

    ax2 =fig.add_subplot(212, axisbg ='w')
    ax2.plot(x,y)

    plt.show()

他のセットが正しくプロットされているデータの一方のセットのみをプロットしているときに、ファイルが互いに置き換えられる理由を誰かが説明できますか?

4

1 に答える 1

1

あなたの例ではループの構造が正しくありません.asciiファイルのループ内にプロットコマンドが必要です.そうしないと最後のものだけがプロットされます. これはうまくいくはずです:

このようにしてみてください:

import glob 
import numpy as np
from struct import unpack
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(11, 8.0))

chi = sorted(glob.glob('C:/Users/Desktop/bin/*.chi'))

for index,fh in enumerate(chi):
    data = np.genfromtxt(fh, dtype = float)
    x = [row[0] for row in data]
    y = [row[1] for row in data]

    ax1 =fig.add_subplot(211, axisbg ='w')
    ax1.plot(x,y)


binary = sorted(glob.glob('C:/Users/Desktop/bin/*.bin'))

for count,FILE in enumerate(binary):
    F = open(FILE,'rb')
    B = unpack('f'*1023183, F.read(4*1023183))
    A = np.array(B).reshape(1043, 981)
    F.close()

    #a = something column 1   # some further processing
    #b =  something column 2  # and generates 1D data


    ax2 =fig.add_subplot(212,axisbg='w')
    ax2.plot(a,b)

plt.show()
于 2013-06-29T05:26:17.917 に答える