Построение тепловой карты Python в реальном времени

У меня есть 2D сетка 50*50. Для каждого местоположения у меня есть значение интенсивности (т.е. данные похожи на (x,y,intensity) для каждого из этих 50 * 50 местоположений). Я хотел бы визуализировать данные в виде тепловой карты.

Суть в том, что интенсивность будет меняться каждую секунду (для большинства локаций), а это значит, что мне нужно будет перерисовывать тепловую карту каждую секунду. Мне интересно, что является лучшей библиотекой/подходом для обработки такого рода изменяющейся тепловой карты в реальном времени.


person aha    schedule 19.08.2014    source источник
comment
Вы пробовали в ArcGis? С ArcGis 10 поставляется модуль Python под названием arcpy. Похоже, вы могли бы найти ему какое-то применение. help.arcgis.com/en/arcgisdesktop/10.0/ help/index.html#//   -  person Stophface    schedule 19.08.2014


Ответы (2)


Это действительно зависит от того, как вы получаете свои данные, но:

import matplotlib.pyplot as plt
import numpy as np
import time

# create the figure
fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.imshow(np.random.random((50,50)))
plt.show(block=False)

# draw some data in loop
for i in range(10):
    # wait for a second
    time.sleep(1)
    # replace the image contents
    im.set_array(np.random.random((50,50)))
    # redraw the figure
    fig.canvas.draw()

Это должно нарисовать 11 случайных изображений 50x50 с интервалом в 1 секунду. Существенной частью является im.set_array, который заменяет данные изображения, и fig.canvas.draw, который перерисовывает изображение на холст.


Если ваши данные действительно представляют собой список точек в форме (x, y, intensity), вы можете преобразовать их в numpy.array:

import numpy as np

# create an empty array (NaNs will be drawn transparent)
data = np.empty((50,50))
data[:,:] = np.nan

# ptlist is a list of (x, y, intensity) triplets
ptlist = np.array(ptlist)
data[ptlist[:,1].astype('int'), ptlist[:,0].astype('int')] = ptlist[:,2]
person DrV    schedule 19.08.2014
comment
Можем ли мы в любом случае добавить фоновое статическое изображение в тепловые карты ?? - person ; 08.05.2015

Спасибо за ваш ответ, это помогло мне. Могу ли я добавить, что теперь, если вы хотите, чтобы это правильно обновлялось и отображалось на вашей фигуре итеративно, вам нужно добавить строку в конце:

fig.canvas.flush_events()

А для пользователей Jupyter, чтобы рисунок открывался снаружи в новом окне, добавьте в начале вашей ячейки:

%matplotlib qt
person Paul Courty    schedule 29.04.2021