Изчертаване на топлинна карта в реално време на 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