2013-07-11 2 views
0

У меня есть список raws массивов, которые я хотел бы построить в ipython ноутбуке. Вот код, который я пытаюсь получить работу:Задание списка массивов с matplotlib

fig, axes = subplots(len(raws),1, sharex=True, tight_layout=True, figsize=(12, 6), dpi=72) 
for r in range(len(raws)): 
    axes[r].plot(raws) 

Я потерял в течение нескольких часов, если не дни, пытаясь выяснить, как индексировать список raws, так что я могу сюжет каждого массив MXN по себе ось, где n - количество точек времени, т. е. ось x, а m - количество функций временного ряда, отобранных в каждой точке.

Когда код I:

for r in range(len(raws)): 
     axes[r].plot(raws[r]) 

я получаю ValueError: установка элемента массива с последовательностью.

Для информации:

len(raws) = 2 
    type(raws) = 'list' 
    np.shape(raws[0][0]) = (306, 10001) 
    raws = 
[(array([[ -4.13211217e-12, -4.13287303e-12, -4.01705259e-12, ..., 
      1.36386023e-12, 1.65182851e-12, 2.00368966e-12], 
     [ 1.08914129e-12, 1.47828466e-12, 1.82257607e-12, ..., 
     -2.70151520e-12, -2.48631967e-12, -2.28625548e-12], 
     [ -7.80962369e-14, -1.27119591e-13, -1.73610315e-13, ..., 
     -1.13219629e-13, -1.15031720e-13, -1.12106621e-13], 
     ..., 
     [ 2.52774254e-12, 2.32293195e-12, 2.02644002e-12, ..., 
      4.20064191e-12, 3.94858906e-12, 3.69495394e-12], 
     [ -4.38122146e-12, -4.96229676e-12, -5.47782145e-12, ..., 
      3.93820033e-12, 4.18850823e-12, 4.34950629e-12], 
     [ -1.07284424e-13, -9.23447993e-14, -7.89852400e-14, ..., 
      7.92079631e-14, 5.60172215e-14, 3.04448868e-14]]), array([ 60. , 60.001, 60.002, ..., 69.998, 69.999, 70. ])), (array([[ -6.71363108e-12, -5.80501003e-12, -4.95944514e-12, ..., 
     -3.25087343e-12, -2.68982494e-12, -2.13637448e-12], 
     [ -5.04818633e-12, -4.65757005e-12, -4.16084140e-12, ..., 
     -4.26120531e-13, 2.20744290e-13, 7.81245614e-13], 
     [ 1.97329506e-13, 1.64543867e-13, 1.32679812e-13, ..., 
      2.11645494e-13, 1.94795729e-13, 1.75781773e-13], 
     ..., 
     [ 3.04245661e-12, 2.28376461e-12, 1.54118900e-12, ..., 
     -1.14020908e-14, -8.04647589e-13, -1.52676489e-12], 
     [ -1.83485962e-13, -5.22949893e-13, -8.60038852e-13, ..., 
      7.70312553e-12, 7.20825156e-12, 6.58362857e-12], 
     [ -7.26357906e-14, -7.11700989e-14, -6.88759767e-14, ..., 
     -1.04171843e-13, -1.03084861e-13, -9.68462427e-14]]), array([ 60. , 60.001, 60.002, ..., 69.998, 69.999, 70. ]))] 
+0

Так в чем проблема? Вы сталкиваетесь с ошибкой? Это выглядит фанки? – mdscruggs

+0

Если вы хотите, чтобы на каждом подзаводе было ~ 300 строк, измените 'axes [r] .plot (raws)' на 'axes [r] .plot (raws [r])'. Это дает мне два сюжета с множеством строк на каждом. В противном случае мне непонятно, какие сюжеты вы хотите. – wflynny

+0

@Bill Я сталкиваюсь с _italic_ValueError: установка элемента массива с sequence._italic_ либо с помощью осей [r] .plot (raws) в оси [r] .plot (raws [r]) '. – ktavabi

ответ

3

Только так я могу отправить код, я отвечать здесь.

Похоже, что ваши данные вложены в виде

[ (array1, array2, ..., arrayN) ] 

Это может быть обработан в одном из двух способов:

In [2]: raws = [np.random.rand(20, 100), np.random.rand(20, 100)] 

In [3]: raws = raws[0] 

In [4]: f, axes = plt.subplots(len(raws), 1) 

In [5]: for i in range(len(raws)): 
    ...:  axes[i].plot(raws[i]) 

Или

In [3]: raws = [(np.random.rand(20, 100), np.random.rand(20, 100))] 

In [4]: f, axes = plt.subplots(len(raws[0]), 1) 

In [5]: for i in range(len(raws[0])): 
    ...:  axes[i].plot(raws[0][i]) 

enter image description here

+0

Я могу воспроизвести ваш код, но по какой-то причине это не работает с моей версией «raws», которая также относится к типу «list». Интересно, что когда я запускаю 'raws [0] .shape', я получаю AttributeError: объект 'tuple' не имеет атрибута 'shape'. Я не совсем уверен, что такое «кортеж» ?! – ktavabi

+0

Кортежи - это неизменные объекты списка: '(1, 2, 3)' в отличие от '[1, 2, 3]'. Как вы создали свой объект 'raws'? Похоже, что ваши массивы numpy вложены в кортежи в списке. – wflynny

+0

Объект 'raws' был создан с использованием вывода функции класса модуля (малоизвестного python), который считывает двоичные файлы, содержащие данные временного ряда с несколькими датчиками. Извините, но я действительно не знаю, что еще вам сказать. Вот ссылка на [function] (http://martinos.org/mne/generated/mne.fiff.Raw.html) – ktavabi

0

Если вы h пр список массивов, таких как abac ниже, вы можете построить следующим образом:

import numpy as np 
a = np.array(range(20)) 
b = a * 2 
c = a * 3 
abac = a,b,a,c 

plt.plot(*abac) 
Смежные вопросы