python matplotlib обновляет график рассеяния от функции

Я пытаюсь автоматически обновить график разброса. Источник моих значений X и Y является внешним, и данные автоматически вставляются в мой код в течение непредсказуемых временных интервалов (раундов).

Мне удалось обработать все данные, когда весь процесс закончился, тогда как я пытаюсь постоянно добавлять и печатать данные в свой холст.

  • График разметки matplotlib с разными маркерами и цветами
  • Получить данные из графика с помощью matplotlib
  • matplotlib 3D-диаграмма рассеяния с цветом маркера, соответствующим значениям RGB
  • Есть ли функция для создания матриц рассеяния в matplotlib?
  • Что я получаю (в конце всего пробега): введите описание изображения здесь

    Принимая во внимание, что я за этим: введите описание изображения здесь

    Упрощенная версия моего кода:

    import matplotlib.pyplot as plt def read_data(): #This function gets the values of xAxis and yAxis xAxis = [some values] #these valuers change in each run yAxis = [other values] #these valuers change in each run plt.scatter(xAxis,yAxis, label = 'myPlot', color = 'k', s=50) plt.xlabel('x') plt.ylabel('y') plt.show() 

  • Создание PNG с matplotlib, когда DISPLAY не определено
  • Matplotlib: как построить категориальные данные по оси y?
  • Контуры рассеянности в Matplotlib
  • Есть ли функция для создания матриц рассеяния в matplotlib?
  • Получить данные из графика с помощью matplotlib
  • Если вы ищете быстрый способ найти многоугольник, то точка принадлежит Shapely
  • 2 Solutions collect form web for “python matplotlib обновляет график рассеяния от функции”

    Существует несколько способов анимации графика matplotlib. Ниже мы рассмотрим два минимальных примера, используя график рассеяния.

    (a) использовать интерактивный режим plt.ion()

    Для анимации нам нужен цикл событий. Один из способов получения цикла событий – использовать plt.ion() («интерактивный»). Затем нужно сначала нарисовать фигуру и затем обновить график в цикле. Внутри цикла нам нужно нарисовать холст и ввести небольшую паузу для окна для обработки других событий (например, взаимодействия с мышью и т. Д.). Без этой паузы окно замерзло. Наконец, мы вызываем plt.waitforbuttonpress() чтобы окно оставалось открытым даже после завершения анимации.

     import matplotlib.pyplot as plt import numpy as np plt.ion() fig, ax = plt.subplots() x, y = [],[] sc = ax.scatter(x,y) plt.xlim(0,10) plt.ylim(0,10) plt.draw() for i in range(1000): x.append(np.random.rand(1)*10) y.append(np.random.rand(1)*10) sc.set_offsets(np.c_[x,y]) fig.canvas.draw_idle() plt.pause(0.1) plt.waitforbuttonpress() 

    (b) с использованием FuncAnimation

    Многое из вышеперечисленного может быть автоматизировано с использованием matplotlib.animation.FuncAnimation . FuncAnimation позаботится о цикле и перерисовке и будет постоянно вызывать функцию (в этом случае animate() ) по истечении заданного интервала времени. Анимация запускается только после plt.show() , тем самым автоматически запускается в цикле событий окна графика.

     import matplotlib.pyplot as plt import matplotlib.animation import numpy as np fig, ax = plt.subplots() x, y = [],[] sc = ax.scatter(x,y) plt.xlim(0,10) plt.ylim(0,10) def animate(i): x.append(np.random.rand(1)*10) y.append(np.random.rand(1)*10) sc.set_offsets(np.c_[x,y]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=2, interval=100, repeat=True) plt.show() 

    Насколько я понимаю, вы хотите интерактивно обновлять свой сюжет. Если это так, вы можете использовать график вместо графика разброса и обновлять данные вашего сюжета.

     import numpy import matplotlib.pyplot as plt fig = plt.figure() axe = fig.add_subplot(111) X,Y = [],[] sp, = axe.plot([],[],label='toto',ms=10,color='k',marker='o',ls='') fig.show() for iter in range(5): X.append(numpy.random.rand()) Y.append(numpy.random.rand()) sp.set_data(X,Y) axe.set_xlim(min(X),max(X)) axe.set_ylim(min(Y),max(Y)) raw_input('...') fig.canvas.draw() не import numpy import matplotlib.pyplot as plt fig = plt.figure() axe = fig.add_subplot(111) X,Y = [],[] sp, = axe.plot([],[],label='toto',ms=10,color='k',marker='o',ls='') fig.show() for iter in range(5): X.append(numpy.random.rand()) Y.append(numpy.random.rand()) sp.set_data(X,Y) axe.set_xlim(min(X),max(X)) axe.set_ylim(min(Y),max(Y)) raw_input('...') fig.canvas.draw() 

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

    Python - лучший язык программирования в мире.