如何在python中绘制数组?

时间:2017-02-14 13:54:40

标签: python arrays numpy matplotlib

我按照此链接How to append many numpy files into one numpy file in python将所有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()

它给了我这个错误:

  

引发ValueError(“x和y不能大于2-D”)ValueError:x   y可以不大于2-D

所有这些值代表y_axe,但是我的x-ax代表从1到8000的点。所以,据我所知,为了绘制我的最终大数组,它必须看起来像这样(差异在{{1 }}):

[]

我可以轻松地绘制此文件。

所以我无法真正理解这个问题。

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

1 个答案:

答案 0 :(得分:3)

如果你给matplotlib的plot函数提供一个二维数组,它会假设列是行:

  

如果x和/或y是二维的,那么相应的列将是   被绘制。

在您的情况下,您的形状不被接受(100,1,1,8000)。因此,你可以使用numpy squeeze来快速解决问题:

  

np.squeez doc:从数组形状中删除一维条目。

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

但请注意,100套80 000点是matplotlib的大量数据。我建议你寻找替代方案。代码示例(在Jupyter中运行)的结果是:

Jupyter matplotlib plot