Изменение графиков в реальном времени с помощью matplotlib - PullRequest
0 голосов
/ 28 мая 2020

Это код.

import matplotlib.pyplot as plt
import random

x = []
y = []

for i in range(10):
    x.append(i)
    y.append(random.randint(0,100))

graph = plt.bar(x,y)
plt.show()

Каждый раз, когда я изменяю какое-либо значение y, скажем y [4] = 7 , я хочу, чтобы это отражалось на графике. Я хочу, чтобы этот график переместился .

Я попытался найти решение для этого, но ни одно из них не помогло мне.

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random

x = []
y = []

for i in range(10):
    x.append(i)
    y.append(random.randint(0,100))

fig, ax = plt.subplots()
bar, = ax.plot(x,y)

def animate(i):
    x = []
    y = []

    for i in range(10):
        x.append(i)
        y.append(random.randint(0,100))

    bar.set_xdata(x)
    bar.set_ydata(y)

    return bar,

animation  = FuncAnimation(fig, animate, interval = 1000)
plt.show()

Мне нужны аналогичные результаты, но в форма гистограммы. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Наконец-то получил то, что хотел

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import random

X = []
Y = []

for i in range(20):
    Y.append(random.randint(1, 100))
    X.append(i)

fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(X, Y, color="#ff7f7f")
ax.set_yticks([])
ax.set_xticks(X)

for number in range(len(Y)):
    ax.text(number, Y[number], Y[number],
            horizontalalignment='center', va="baseline", fontsize=13)


def draw_barchart(year):
    ax.clear()

    X.clear()
    Y.clear()

    for i in range(20):
        Y.append(random.randint(1, 100))
        X.append(i)

    ax.bar(X, Y, color="#ff7f7f")
    ax.set_yticks([])
    ax.set_xticks(X)

    ax.set_yticks([])
    ax.set_xticks(X)

    for number in range(len(Y)):
        ax.text(number, Y[number], Y[number], horizontalalignment='center', va="baseline", fontsize=13)

    plt.box(False)


animator = animation.FuncAnimation(fig, draw_barchart, interval=1000)

plt.show()
0 голосов
/ 28 мая 2020

Данные, отображаемые на гистограмме, не связаны с данными в вашем списке. К списку не прикреплен слушатель, который позволяет pyplot знать, когда список был изменен.

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

Обратите внимание, что приведенный ниже код работает, потому что x и индексы столбцов совпадают. Если x начиналось с 1 или было range(0, 100, 10), код становится более сложным.

import matplotlib.pyplot as plt
import random

# turn on interactive graphing
plt.ion()

x = []
y = []

for i in range(10):
    x.append(i)
    y.append(random.randint(0,100))

graph = plt.bar(x,y)
plt.show()

y[4] = 7
graph.get_children()[4].set_height(7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...