График искаженной линии

Как построить график из таких данных: [0,0,1,1,0,0,2,0,1,0,2,0,0,1,0,0,1,0,0,2,0,0,1,0,0] Такого вида: введите сюда описание изображения

Где от 1 до 2х рисуется линия. Некоторые аспекты - рисуем по последней единице или двойке. Если значение например 0,1,1 - то берется последнее значение для нижней точки, а если ,0,1,0,0,1,0, то для низа также берется последнее значение 1.


Ответы (1 шт):

Автор решения: GrAnd

Из вашего описания не просто понять, как же именно требуется изобразить ломанную. Надеюсь я угадал.

data = [0,0,1,1,0,0,2,0,1,0,2,0,0,1,0,0,1,0,0,2,0,0,1,0,0]
#             ^     ^   ^   ^           ^     ^     ^
# если я правильно понял, то надо найти выше отмеченные 
# элементы списка и построить график
# где X = индекс элемента в списке
# а Y = значение самого элемента

points = [[0, 1]]    # координаты [X,Y] первой точки
for i, value in enumerate(data):
    if value == points[-1][1]:
        # если значение то же, что и Y последней точки,
        # то просто обновляем ей координату X
        points[-1][0] = i
    elif value:
        # для ненулевого значения, которое не совпало 
        # с Y последней точки, создаём новую точку
        points.append([i, value])

print(points)

# выводим график
import matplotlib.pyplot as plt
xx, yy = zip(*points)
plt.plot(xx, yy, "-ok")
plt.xticks(range(len(data)))
plt.yticks([1, 2])
plt.show()

Найденные точки:

[[3, 1], [6, 2], [8, 1], [10, 2], [16, 1], [19, 2], [22, 1]]

График

→ Ссылка