2

もう 1 つ問題が発生しました。次の形式のファイルが複数あります。

周波数AB

1000 1.2 0.0014

100 1.2 0.00013

10 1.2 0.0012

すべてのファイルが同じフォルダーにあります。これまでのところ、すべてのファイルを読み取り、必要な計算を実行してから、必要なすべてのデータを含む 1 つの大きなファイルを保存できます (コードについては以下を参照)。

必要なデータを保存する前に:

データを元のファイルの数に分割し、新しいデータを使用して、入力名と同じ名前を使用します (コードの N はファイルあたりの行数です。これを使用して、ファイルの数を特定できます総行数から持っています)

そして、すべての異なるデータを1つのプロットにプロットするには(上記のような3つのファイルがあると仮定すると、すべて同じプロットに3行のプロットが必要です)-すべての試行以来、それを行うことができないようです1行だけ教えてください

* 更新 - データを読み取ることができ、すべてを最初のループに入れてから、すべてのデータを調べることができます - 今、保存機能を自動化したいのですが、コード (以下の単純化されたバージョンを参照) は 1 つのデータセットのみを保存します (おそらくテキストファイルを上書きしますか?) * UPDATE 2 - これで機能するようになりました - 2 番目のループに保存機能を追加する必要がありました

import os
import numpy as np

datadirectory = '/media/data'
os.chdir( datadirectory)

listing = os.listdir(datadirectory) 
my_array=np.zeros(shape=(0,3))

for infile in listing: 
   dataset = open(infile).readlines()
   data = np.genfromtxt(dataset, usecols=(0,1,2))
   my_array = np.vstack((my_array, data))
   lta= my_array

SOME PROCESSING HERE - lta には 5 つの列があります

   Results=np.column_stack((lta[:,0], lta[:,1], lta[:,2], lta[:,3], lta[:,4]))
   for i in listing:
       date = i
       np.savetxt((os.path.join(resultpath, date)) + '.txt', Results, fmt='%s', delimiter='\t') 
   my_array = np.vstack((my_array, Results))

データをプロットする - my_array 配列にすべてのデータがあり、N 行 (与えられた番号) ごとに異なるデータセットがあります - すべてのデータを同じグラフにプロットし、N 行ごとにシンボルの色を変更したい

import matplotlib.pylab as plt

plt.figure(figsize=(10,5))
#graph_axes = plt.subplot(N,2,1)
graph = plt.semilogx(my_array[:,0], my_array[:,2])
plt.ylim(0, 25)
plt.xlim(0.1, 1000)
plt.show()
plt.savefig(os.path.join(resultpath, 'image.png'))

ヘルプ/ガイダンスをいただければ幸いです。

4

1 に答える 1

0

の内容のサンプルを提供してmy_arrayいただけると助かりますが、私が理解している限りでは、このコードは必要なものを達成するのに役立ちます。まず、データを偽造するために書いたコードを次に示します。

import numpy as np
from random import random

# generate fake data
num_files = 5
N = 20
my_array = []
for f in range(num_files):  # simulate multiple files
    for n in range(N):  # simulate multiple samples per file
        # fake data
        my_array.append([10 ** n / N, random() + f, 10 + f + random()])
my_array = np.asarray(my_array)

うまくいけば、この時点で my_array の内容はあなたが持っているものと似ています (データを処理した後、5 列ではなく 3 列のみをシミュレートしましたが、次のプロット コードには影響しません:

import matplotlib.pyplot as plt

# now plot it
for i in range(0, num_files * N, N):
    # plot column-0 vs column-1 in one subplot
    plt.subplot(2, 1, 1)
    plt.semilogx(my_array[i:i + N, 0], my_array[i:i + N, 1])
    plt.hold(True)
    # plot column-0 vs column-2 in another subplot
    plt.subplot(2, 1, 2)
    plt.semilogx(my_array[i:i + N, 0], my_array[i:i + N, 2])
    plt.hold(True)
plt.show()

トリックはplt.hold(True)、以前にプロットされたものを保持し、プロットされる次のデータに新しい色を割り当てる を使用することです。このソリューションは、N が定数でない場合にも機能します (ただし、データのループ方法を変更する必要があります)。

それが役立つことを願っています!

于 2013-02-05T06:35:28.140 に答える