2017-06-30 8 views
1

2つのデータ配列から2次元ヒストグラムを作成しようとしています.1つはy値の範囲(rdata)を持つリストで、もう1つは外側のリストが強度を与える入れ子リストです特定の時間に強度を与え、内側のリストは高さ範囲の1つの特定の時間に強度を与える。リストのリストから2dヒストグラムを作成する

私はy軸上の範囲値とx軸上の強度値で2次元ヒストグラムを作成しようとしています。私はnumpy.histogram2dのドキュメントを見て、simmpler配列で作成したテンプレートファイルからこのヒストグラムを再構築しようとしました。

import numpy as np 
import file_reader as fr 
import matplotlib.pyplot as plt 

time = [] 
rdata = [] 
intensity = [] 

fr.file_reader(time, rdata, intensity) 
print('TIME DATA:', time) 
print('RANGE DATA:', rdata) 
print('INTENSITY DATA:', intensity) 

range_bins = np.linspace(rdata[0],rdata[1],len(rdata)) 
intensity_bins = np.linspace(-70,30,len(intensity)) 
rdata = [rdata] 

for i in range((len(time)-1)): 
    rdata.append(rdata) 

print(rdata) 


H, intensity_bins, rdata_bins = np.histogram2d(intensity,rdata,bins=(intensity_bins,range_bins)) 

X,Y = np.meshgrid(intensity_bins,range_bins) 
plt.xlim(intensity_bins[-1]) 
plt.ylim(range_bins[-1]) 
plt.pcolormesh(X,Y,H, cmap='Reds') 
plt.draw() 

file_reader私は.TXTからとsimplicitiesのために、私は私がしようとしている配列を構築することから、データ出力を、含まれるデータを読み取るために作成されたファイルです:添付

コードですプロットに:それは同じ長さだったともリストの入れ子集合を考え含まれているので、私の範囲内(LEN(時間)-1)関数は、私はレンジデータリストをコピーするかどうかを確認するためにテストしていたザ・用

TIME DATA: [16.23638916015625, 16.23916625976562, 16.24194526672363, 16.24472236633301, 16.24749946594238, 16.25027847290039, 16.25305557250977] 
RANGE DATA: [155.89599609375, 187.0751953125, 218.25439453125, 249.43359375, 280.61279296875, 311.7919921875] 
INTENSITY DATA: [[nan, nan, nan, nan, nan, nan], [nan, nan, -59.63091278076172, -49.99733352661133, nan, nan], [nan, 4.0, -3.2, -20.0, -20.0, -20.0], [1.1, nan, nan, nan, nan, nan], [nan, nan, -59.63091278076172, -49.99733352661133, nan, nan], [nan, 4.0, -3.2, -20.0, -20.0, -20.0], [5.32, -29.48, -50.0, -32.2, -1.111, -51.3]] 

ヒストグラムにデータを入力するのに役立ちますが、コードを実行すると出力はありません。私はctrl + cを実行してコードを停止する必要があるので、それは立ち往生しているようです。ここ10分間の土曜日は、何も出力も仕上げもしませんでした。これは小さなデータ配列なので馬鹿げています。

ご協力いただければ幸いです。

+0

:私はintensity 1次元配列を作るためにravel機能を使用してRDATA配列を作成するためにrepeatを使用して、コードを変更しました.draw() 'を' plt.show() 'と一緒に使用しますか? – ImportanceOfBeingErnest

答えて

0

numpy.histogram2DXYは、各点のx座標とy座標の1D配列である必要があります。あなたが与えたデータ出力から、intensity配列が2Dであるように見えます。また、rdata追加ループを実行しているときは、中間値(2D)を追加しています。あなたは `PLTを置き換えるとどうなるか、それにさらに見ない

import numpy as np 
import matplotlib.pyplot as plt 

time =[16.23638916015625, 16.23916625976562, 16.24194526672363, 
    16.24472236633301, 16.24749946594238, 16.25027847290039, 16.25305557250977] 
rdata=[155.89599609375, 187.0751953125, 218.25439453125, 249.43359375, 
    280.61279296875, 311.7919921875] 
intensity= [[np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN], 
    [np.NaN, np.NaN, -59.63091278076172, -49.99733352661133, np.NaN, np.NaN], 
    [np.NaN, 4.0, -3.2, -20.0, -20.0, -20.0], [1.1, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN], 
    [np.NaN, np.NaN, -59.63091278076172, -49.99733352661133, np.NaN, np.NaN], 
    [np.NaN, 4.0, -3.2, -20.0, -20.0, -20.0], [5.32, -29.48, -50.0, -32.2, -1.111, -51.3]] 


range_bins = np.linspace(rdata[0],rdata[-1],len(rdata)) 
intensity_bins = np.linspace(-70,30,len(intensity)) 

intensity = np.array(intensity).ravel() 

rdata = np.repeat(rdata,len(time)) 

H, intensity_bins, range_bins = np.histogram2d(intensity,rdata, 
    bins=(intensity_bins,range_bins)) 

plt.imshow(H, interpolation='nearest', origin='low', 
    extent=[intensity_bins[0], intensity_bins[-1],range_bins[0], range_bins[-1]]) 

Output

+0

len(time)* rdataを実行して新しいrdataを数値順に取得するように修正しました。そうでなければ、それは答え、感謝の多くを助けた! – JackLidge

関連する問題