Python绘图numpy数组

2024-04-20 02:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将一些光谱数据绘制成二维图像,其中每个数据点对应一个具有特定日期/时间的光谱。我需要绘制所有光谱,如下所示: -xx轴-对应于波长 -yy轴-对应于日期/时间 -强度-对应于通量

如果我的数据点在时间上是连续的/连续的,我只会使用matplotlib的imshow。然而,不仅这些点在时间上不是连续的/连续的,而且我在点之间有很大的时间间隔

以下是一些模拟数据,模拟了我所拥有的:

import numpy as np

sampleSize = 100

data={}
for time in np.arange(0,5):
    data[time] = np.random.sample(sampleSize)

for time in np.arange(14,20):
    data[time] = np.random.sample(sampleSize)

for time in np.arange(30,40):
    data[time] = np.random.sample(sampleSize)


for time in np.arange(25.5,35.5):
    data[time] = np.random.sample(sampleSize)

for time in np.arange(80,120):
    data[time] = np.random.sample(sampleSize)

如果我只需要打印上面数据的一个子集;我会做:

mplt.imshow([data[time] for time in np.arange(0,5)], cmap ='Greys',aspect='auto',origin='lower',interpolation="none",extent=[-50,50,0,5])

mplt.show()

但是,我不知道如何在同一绘图中打印所有数据,同时显示间隙并保持yy轴作为时间。有什么想法吗

谢谢你, 豪尔赫


Tags: 数据sampleinfordatatimenp时间
2条回答

最后我采用了不同的方法:

1)重新索引我的数据中的时间,以便没有两个数组具有相同的时间,并且我避免使用非整数索引

nTimes = 1
timeIndexes=[int(float(index)) for index in data.keys()]
while len(timeIndexes) != len(set(timeIndexes)):
    nTimes += 1
    timeIndexes=[int(nTimes*float(index)) for index in data.keys()]

timeIndexesDict = {str(int(nTimes*float(index))):data[index] for index in data.keys()}
lenData2Plot = max([int(key) for key in timeIndexesDict.keys()])

2)创建一个零数组,其中列数与我的数据相同,行数与我的最大重新索引时间相对应

data2Plot = np.zeros((int(lenData2Plot)+1,sampleSize))

3)替换我的时间对应的零数组中的行

for index in timeIndexesDict.keys():
    data2Plot[int(index)][:] = timeIndexesDict[str(index)]

4)像我通常那样绘制一个没有间隙的数组

mplt.imshow(data2Plot,
            cmap='Greys',aspect='auto',origin='lower',interpolation="none",
       extent=[-50,50,0,120])
mplt.show()

或者可以使用pandas来帮助您排序键,然后reindex

df = pd.DataFrame(data).T
plt.imshow(df.reindex(np.arange(df.index.max())),
           cmap ='Greys',
           aspect='auto',
           origin='lower',
           interpolation="none",
           extent=[-50,50,0,5])

输出:

enter image description here

相关问题 更多 >