2016-09-06 6 views
2

私は10個の対応する入力ファイルのリストを持っています。タブで区切られたデータの列はそれぞれ約300行/データポイントです。Python - 複数のファイルの内容をグラフで表示

各データセットの内容をプロットして、各データセットの2つのプロットが1つのx vs(y1、y2、y3、...)であり、例えば関数によって変換されるx vs(f(y1)、f(y2)、f(y3)、...)。

私はそれを達成するための最良の方法のわからない、私はその後、データを上書きすることなく、それらすべてを格納する方法を考え出すことができなかったファイル名の単純な配列を使用して考えた - このような何か:

import numpy as np 
import matplotlib.pyplot as plt 

def ReadDataFile(file): 
    print (file) 
    x,y = np.loadtxt(file, unpack=True, usecols=(8,9)) 
    return x, y 

inputFiles = ['data1.txt','data2.txt','data2.txt',...] 
for file in inputFiles: 
    x1,y1 = ReadDataFile(file) ## ? ## 
    p1,q1 = function(x1,y1) ## ? ## 

plt.figure(1) 
plt.plot(x1,y1) 
plt.plot(x2,y2) 
... 
# plt.savefig(...) 

plt.figure(2) 
plt.plot(p1,q1) 
plt.plot(p2,q2) 
... 
# plt.savefig(...) 
plt.show() 

私の質問は、すべてのデータを最善に読み込んで保存し、すべてのコードをreadloopに入れることなくアクセスできることです。 2つのデータセットをペアのリストに読み込むことはできますか?それはPythonのものですか?もしそうなら、どうすればそれらにアクセスできますか?

ありがとうございました! よろしくお願いいたします。

+0

各データファイルを読み込んで辞書に入れるのはどうですか?それはあなたのために働くだろうか? – gabra

+0

データを配列に保持し、 'np.hstack()'を使ってデータを結合することができます(xは1つ、yはそれぞれ1つ)。結合された配列を1つのプロットオブジェクト内のサブプロットとしてプロットします。私は 'GridSpec'がかなり良いと思っています。 – Andrew

+0

@gabra 私は辞書に誇りを持っているとは言いがたいですが、私の理解ではキーと値のペアを格納しているので、C++マップのようなものを考えていますか?マップへの '値'エントリをリストにすることはできますか? ie:key1 = 'x1'、value1 = [... x1値リスト...] とkey2 = 'y2'とvalue2 '= [... y1値リスト...] これはちょっとしたようです私に!もっと洗練されたソリューションが必要だと思いましたか? – Pete

答えて

0

基本的には、すべてのコードをreadloopに置く必要があると思います。これは簡単に動作するためです。 matplotlibを使用する方法が少し違っているので、データの既存の組織を使いやすくし、短いコードを書くことができます。ここではおもちゃだが、完全な、例:

import matplotlib.pyplot as plt 
from numpy.random import random 

fig, axs = plt.subplots(2) 

for c in 'abc':     # In your case, for filename in [file-list]: 
    x, y = random((2, 5)) 
    axs[0].plot(x, y, label=c)  # filename instead of c in your case 
    axs[1].plot(x, y**2, label=c) # Plot p(x,y), q(x,y) in your case 

axs[0].legend() # handy to get this from the data list 

fig.savefig('two_plots.png') 

enter image description here

あなたはまた、二つの図を作成し、あなたが、などのページレイアウトのために別のファイルにそれらを必要とする場合は、明示的にそれらのそれぞれにプロットすることができます。

import matplotlib.pyplot as plt 
from numpy.random import random 

fig1, ax1 = plt.subplots(1) 
fig2, ax2 = plt.subplots(1) 

for c in 'abc':     # or, for filename in [file-list]: 
    x, y = random((2, 5)) 
    ax1.plot(x, y, label=c) 
    ax2.plot(x, y**2, label=c) 

ax1.legend() 
ax2.legend() 

fig1.savefig('two_plots_1.png') 
fig2.savefig('two_plots_2.png') 
+0

ありがとう!魅力的な仕事をしました。 – Pete

関連する問題