1

我正在尝试从两个数据数组创建一个二维直方图,一个具有 y 值范围(rdata)的列表,另一个是嵌套列表,其中外部列表​​给出特定时间的强度,内部列表给出强度在某一高度范围内的特定时间。

我正在尝试创建一个二维直方图,其中 y 轴上的范围值和 x 轴上的强度值。我查看了 numpy.histogram2d 文档并尝试从使用更简单数组创建的模板文件中重建此直方图。

附上代码:

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 读取数据,为了简单起见,我将包含来自该文件的数据输出,它构建了我要绘制的数组:

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]]

for i in range(len(time)-1) 函数是我测试是否复制范围数据列表使其长度相同并且还包含一组嵌套列表将有助于将数据输入到直方图中,但是当我运行代码没有输出,它似乎卡住了,因为我必须按 ctrl+c 来停止代码运行。在这里坐了十分钟,它没有产生任何输出或完成运行,这很可笑,因为这些是小型数据阵列。

任何帮助将非常感激。

4

1 回答 1

0

numpy.histogram2D需要XY是每个点的 x 和 y 坐标的一维数组。intensity从您提供的数据输出来看,您的数组看起来是二维的。此外,当您运行rdata追加循环时,您正在追加中间值(即 2D)。我通过使用该ravel函数创建intensity一维数组并使用repeat创建 rdata 数组来更改您的代码:

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]])

输出

于 2017-06-30T16:29:46.900 回答