如何在Python中绘制数组?

16

我遵循这个链接如何在Python中将多个numpy文件追加到一个numpy文件中,将所有的numpy文件放入一个文件中。 现在,我需要绘制包含许多数组的文件,每个数组都包含一些浮点数:这是我的最终代码,将数组追加到一个大数组中:

import matplotlib.pyplot as plt 
import numpy as np
import glob
import os, sys
fpath ="/home/user/Desktop/OutFileTraces.npy"
npyfilespath="/home/user/Desktop/test"   
os.chdir(npyfilespath)
npfiles= glob.glob("*.npy")
npfiles.sort()
all_arrays = []
with open(fpath,'ab') as f_handle:
    for npfile in npfiles:
        #Find the path of the file and Load file
        all_arrays.append(np.load(os.path.join(npyfilespath, npfile)))        
    np.save(f_handle, all_arrays)
    data = np.load(fpath)
    print data

这段代码给我生成了以下结果:

[[[[-0.00824758 -0.0081808  -0.00811402 ..., -0.0077236  -0.00765425
    -0.00762086]]]


 [[[-0.00141527 -0.00160791 -0.00176716 ..., -0.00821419 -0.00822446
    -0.0082296 ]]]


 [[[ 0.01028957  0.01005326  0.0098298  ..., -0.01043341 -0.01050019
    -0.01059523]]]


 ..., 
 [[[ 0.00614908  0.00581004  0.00549154 ..., -0.00814741 -0.00813457
    -0.00809347]]]


 [[[-0.00291786 -0.00309509 -0.00329287 ..., -0.00809861 -0.00797789
    -0.00784175]]]


 [[[-0.00379887 -0.00410453 -0.00438963 ..., -0.03497837 -0.0353842
    -0.03575151]]]]

我需要绘制包含大数组的最终文件OutFileTraces.npy的图表。为此,我使用以下代码:

import matplotlib.pyplot as plt 
import numpy as np
dataArray1= np.load(r'/home/user/Desktop/OutFileTraces.npy')
print(dataArray1)
plt.plot(dataArray1.T )
plt.show()

它给我这个错误:

raise ValueError("x and y can be no greater than 2-D") ValueError: x 和 y 不能大于2维

所有的值都代表y轴,但我的x轴表示从1到8000的点。因此,我理解为了绘制最终的大数组,它必须像这样看起来(区别在于[]):

[[-0.00824758 -0.0081808  -0.00811402 ..., -0.0077236  -0.00765425


     -0.00762086]


     [-0.00141527 -0.00160791 -0.00176716 ..., -0.00821419 -0.00822446
        -0.0082296 ]


     [ 0.01028957  0.01005326  0.0098298  ..., -0.01043341 -0.01050019
        -0.01059523]


     ..., 
     [0.00614908  0.00581004  0.00549154 ..., -0.00814741 -0.00813457
        -0.00809347]


     [-0.00291786 -0.00309509 -0.00329287 ..., -0.00809861 -0.00797789
        -0.00784175]


     [-0.00379887 -0.00410453 -0.00438963 ..., -0.03497837 -0.0353842
        -0.03575151]]

我可以轻松绘制这个文件。

所以我实在无法理解问题所在。

如果您能帮助我,我将非常感激。


每个数组代表什么?对于一个平面图,通常会有点x和y。你的数据如何映射到x和y? - James
@James,每个数组代表一个跟踪,我能够在一个图中绘制它们所有。我也能够在不同的图中绘制每个跟踪,但是当我尝试将所有跟踪放入一个文件中时,我被阻止了,并且出现了错误。 - nass9801
你能否把这个问题简化一下,并提供一个“最小、完整、可验证”的示例(MCVE)? - blacksite
@not_a_robot,请您看一下更新后的问题。 - nass9801
1
看起来你的数组是4维的。data.shape是什么? - hpaulj
显示剩余3条评论
1个回答

15
如果你把一个二维数组传递给matplotlib的plot函数,它会将列视为线条:
如果x和/或y是二维的,则相应的列将被绘制。
在你的情况下,你的形状不被接受 (100, 1, 1, 8000)。因此,你可以使用numpy的squeeze快速解决问题: np.squeeze文档:从数组的形状中删除单个维度条目。
import numpy as np
import matplotlib.pyplot as plt

data = np.random.randint(3, 7, (10, 1, 1, 80))
newdata = np.squeeze(data) # Shape is now: (10, 80)
plt.plot(newdata) # plotting by columns
plt.show()

但请注意,对于matplotlib来说,100组80000个数据是非常大的。我建议您寻找替代方案。在Jupyter中运行代码示例的结果如下:

Jupyter matplotlib plot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接