График динамического изменения графика с использованием matplotlib в Jupyter Notebook
У меня есть массив M x N 2D: i-я строка представляет это значение N точек в момент i.
Я хочу визуализировать точки [1 строку массива] в виде графика, в котором значения обновляются после небольшого интервала. Таким образом, график показывает по 1 строке за раз, затем обновляет значения до следующей строки, так далее и т. Д.
Я хочу сделать это в ноутбуке jupyter. Поиск ссылочных кодов.
Я пробовал следующие вещи, но не имел успеха:
http://community.plot.ly/t/updating-graph-with-new-data-every-100-ms-or-so/812
https://pythonprogramming.net/live-graphs-matplotlib-tutorial/
Создание динамического обновленного графика с помощью Python
Обновить строки в matplotlib
- Создание PNG с matplotlib, когда DISPLAY не определено
- python matplotlib обновляет график рассеяния от функции
- сюжетная категориальная переменная по сравнению с другой категориальной переменной в Python
- plt.figure () vs subplots в Matplotlib
- График анимации Python
Вот альтернативное, возможно, более простое решение:
%matplotlib notebook import numpy as np import matplotlib.pyplot as plt m = 100 n = 100 matrix = np.random.normal(0,1,m*n).reshape(m,n) fig = plt.figure() ax = fig.add_subplot(111) plt.ion() fig.show() fig.canvas.draw() for i in range(0,100): ax.clear() ax.plot(matrix[i,:]) fig.canvas.draw()
Я создал ноутбук ipython с несколькими примерами
В дополнение к @ 0aslam0 я использовал код здесь . Я только что изменил функцию анимации, чтобы получить следующую строку в следующий раз. Он рисует анимированную эволюцию (М шагов) всех N точек.
from IPython.display import HTML import numpy as np from matplotlib import animation N = 5 M = 100 points_evo_array = np.random.rand(M,N) # First set up the figure, the axis, and the plot element we want to animate fig = plt.figure() ax = plt.axes(xlim=(0, M), ylim=(0, np.max(points_evo_array))) lines = [] lines = [ax.plot([], [])[0] for _ in range(N)] def init(): for line in lines: line.set_data([], []) return lines def animate(i): for j,line in enumerate(lines): line.set_data(range(i), [points_evo_array[:i,j]]) return lines # call the animator. blit=True means only re-draw the parts that have changed. anim = animation.FuncAnimation(fig, animate,np.arange(1, M), init_func=init, interval=10, blit=True) HTML(anim.to_html5_video())
Надеюсь, это будет полезно
Вот библиотека, которая занимается данными о реальном времени / записи данных в режиме реального времени ( джойстик ), хотя я не уверен, что она работает с jupyter. Вы можете установить его с помощью обычного pip install joystick
.
Трудно сделать рабочее решение без дополнительной информации о ваших данных. Вот вариант:
import joystick as jk import numpy as np class test(jk.Joystick): # initialize the infinite loop decorator _infinite_loop = jk.deco_infinite_loop() def _init(self, *args, **kwargs): """ Function called at initialization, see the docs """ # INIT DATA HERE self.shape = (10, 4) # M, N self.data = np.random.random(self.shape) self.xaxis = range(self.shape[1]) ############ # create a graph frame self.mygraph = self.add_frame( jk.Graph(name="TheName", size=(500, 500), pos=(50, 50), fmt="go-", xnpts=self.shape[1], freq_up=5, bgcol="w", xylim=(0, self.shape[1]-1, None, None))) @_infinite_loop(wait_time=0.5) def _generate_fake_data(self): # function looped every 0.5 second """ Loop starting with the simulation start, getting data and pushing it to the graph every 0.5 seconds """ # NEW (RANDOM) DATA new_data = np.random.random(self.shape[1]) # concatenate data self.data = np.vstack((self.data, new_data)) # push new data to the graph self.mygraph.set_xydata(self.xaxis, self.data[-1]) t = test() t.start() t.stop() t.exit()
Этот код создаст график, который автоматически обновляется 5 раз в секунду (freq_up = 5), в то время как новые данные генерируются (произвольно) каждые 0,5 секунды (wait_time = 0,5) и выводятся на график для отображения.
Если вы не хотите, чтобы ось Y t.mygraph.xylim = (0, t.shape[1]-1, 0, 1)
, введите t.mygraph.xylim = (0, t.shape[1]-1, 0, 1)
.
Я мало знаю о matplotlib или jupyter. Тем не менее, меня интересуют графики. Я просто сделал какой-то поисковик и наткнулся на этот пост . Похоже, вам нужно отобразить график в виде HTML-видео, чтобы увидеть динамический граф.
Я пробовал этот пост. Это ноутбук, если вы хотите попробовать. Обратите внимание, что ядро (python 2) требуется для создания видео. Вы можете прочитать об этом здесь .
Теперь вы хотите отобразить строку графика для строки. Я попробовал это . В этом ноутбуке у меня есть dump_data
с 10 строками. Я случайным образом беру один и рисую их и показываю как видео.
Было интересно узнать о юпитере. Надеюсь это поможет.
- Почему virtualenv эффективно отключает заполнение вкладки Python 3?
- Вставка символа с регулярными интервалами в список
- Границы участка дерева в Python
- Matplotlib: график нескольких отдельных графиков в цикле
- Как создать граф с весом вершин в питоне с помощью igraph?
- Как установить математическую функцию в набор данных в Python
- Настройки для timedata на морских участках FacetGrid
- Недопустимый rgba arg "#" в matplotlib
- как запустить / остановить функцию python с 10 до 12:30
- DiGraph: ближайший узел, который соединяет все пути
- Перемещение оси x в matplotlib в режиме реального времени (python)