Matplotlib может отображать только точечный график.

[Питон 2.7.12]

[Matplotlib 1.5.1]

Каждый цикл сканирования моего кода дает «высший» балл. Я хочу построить представление во времени. Я упростил код в приведенном ниже примере:

import matplotlib.pyplot as plt
from matplotlib import lines
import random
count = 1

plt.axis([0, 1000, 0, 100])
plt.ion()

while True:
    count += 1
    a=random.randint(1, 50)
    plt.plot(count, a,'xb-')
    plt.pause(0.05)

plt.show()

Моя цель - создать линейный график. Проблема в том, что какой бы стиль линии я ни установил, он не действует. Он строит только графики разброса. Однако я могу изменить, будет ли это точка или маркер «X».

Или проблема в том, что партитура «нарисовала и забыла», так что ей не из чего почерпнуть?

РЕДАКТИРОВАТЬ: построение будет осуществляться в режиме реального времени.


person SheerKahn    schedule 29.09.2017    source источник
comment
вы пытаетесь сделать анимацию или вам просто нужен линейный график?   -  person Gerges    schedule 29.09.2017
comment
Построение графика в реальном времени (отредактированный исходный вопрос).   -  person SheerKahn    schedule 29.09.2017
comment
Я не уверен в решении, но проблема в том, что a и count являются скалярами, поэтому при вызове plot он отображает одну точку, а многократный вызов plot не соединит точки, потому что будет сгенерирован другой линейный экземпляр,   -  person Gerges    schedule 29.09.2017


Ответы (1)


Вам нужно как минимум 2 точки, чтобы нарисовать линию. Вы можете сохранить и использовать предыдущее состояние на каждом шаге.

import matplotlib.pyplot as plt
from matplotlib import lines
import random

x = 1

plt.axis([0, 1000, 0, 100])
plt.ion()

y_t1 = random.randint(1, 50)
plt.plot(1, y_t1, 'xb')
plt.pause(0.05)

while True:
    x += 1
    y_t2 = random.randint(1, 50)
    plt.plot([x - 1, x], [y_t1, y_t2], 'xb-')
    y_t1 = y_t2
    plt.pause(0.05)

plt.show()

введите здесь описание изображения

person amin    schedule 29.09.2017