2013-08-13 3 views
0

Привет У меня есть 3D-лист (Я понимаю, что это не может быть лучшим представлением моих данных так что любой совет здесь ценится), как, например:земля недостающие точки для сложной 3D списка точек - Python

y_data = [ 
     [[a,0],[b,1],[c,None],[d,6],[e,7]], 
     [[a,5],[b,2],[c,1],[d,None],[e,1]], 
     [[a,3],[b,None],[c,4],[d,9],[e,None]], 
     ] 

Данные оси Y таковы, что каждый подсписщик представляет собой список значений в течение одного часа. Часы - это данные по оси x. Каждый подсписок это имеет следующий формат: [метка, значение]

Так по существу:

line a is [0,5,3] on the y-axis 
line b is [1,2,None] on the y-axis etc. 

Мой х-данные:

x_data = [0,1,2,3,4] 

Теперь, когда я сюжет этот список непосредственно т.е.

for i in range(0,5): 
    ax.plot(x_data, [row[i][1] for row in y_data], label=y_data[0][i][0]) 

Я получаю график, однако, где значение None, точка не нарисовано и линия не связана.

То, что я хотел бы сделать, это иметь график, который будет отображать мои данные в текущем формате, но игнорировать отсутствующие точки и нарисовать линию между точкой перед отсутствующими данными и точкой после (т.е. интерполировать отсутствующую точку).

Я пробовал делать это так: https://stackoverflow.com/a/14399830/1800665, но я не мог понять, как это сделать для 3D-списка.

Спасибо за помощь!

ответ

1

Общий подход, с которым вы связались, будет работать отлично; похоже, вопрос, который вы задаете, - это применить этот подход к вашим данным. Я хотел бы предложить, что, разглаживая данные, которые вы планируете, вы увидите более четко, как это сделать.

import numpy as np 

y_data = [ 
    [[a,0],[b,1],[c,None],[d,6],[e,7]], 
    [[a,5],[b,2],[c,1],[d,None],[e,1]], 
    [[a,3],[b,None],[c,4],[d,9],[e,None]], 
    ] 

x_data = [0, 1, 2, 3, 4] 

for i in range(5): 
    xv = [] 
    yv = [] 
    for j, v in enumerate(row[i][1] for row in y_data): 
     if v is not None: 
      xv.append(j) 
      yv.append(v) 
    ax.plot(xv, yv, label=y_data[0][i][0]) 

Здесь вместо того, чтобы использовать маску, как в связанном вопрос/ответ, я явно создал списки действительных точек данных, которые должны быть построены.

+0

Спасибо, это имеет смысл! Но не могли бы вы объяснить, почему я получаю следующую ошибку: 'ax.plot (x_data [valid], np.asarray (yvals) [valid], label = temp [0] [i] [0]) ... AttributeError : 'numpy.ndarray' объект не имеет атрибута 'find'' –

+1

Хм, не уверен в этом. Я обновил код, чтобы использовать немного другой подход (перестраивая список значений y), который может работать лучше. – lmjohns3

+0

Спасибо за редактирование, просто попробовал это сейчас. Проблема заключается в том, что когда я рисую их, используя ax.plot, он не соединяет линию между точкой перед отсутствующим значением и после отсутствующего значения. Это проблема, которую я пытаюсь решить. Я понимаю, что здесь вы создаете новый список, который вообще не включает координаты «Нет»? Дело в том, что делает сюжет в то время, когда нет координат для сюжета? По сути, кажется, это просто сокращает мой первоначальный список, поэтому вместо того, чтобы содержать «None», запись в списке просто не существует вообще. –

Смежные вопросы