#matplotlib #colormap #imshow
#matplotlib #цветовая карта #imshow
Вопрос:
У меня есть .txt
данные с разделителями размером около 600 x 600 ячеек. Я построил график, используя matplotlib imshow
, и теперь я хочу проанализировать конкретную часть, представляющую интерес в нем. В частности, меня интересует рисование определенной области вокруг определенной точки (x, y) и возврат среднего значения (из файла) в пределах этой области. Я провел некоторый поиск, но не могу найти ничего, что позволило бы мне манипулировать этим как таковым. Самое близкое, к чему я пришел, — это patches
или patches.Circle
функция, но все, что она делает, это позволяет мне нарисовать круг вокруг определенной точки. Я не могу извлечь (или не могу понять, как это сделать) оттуда какую-либо информацию. Вот мой рабочий пример:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
#Setup Plots
fig, ax = plt.subplots(figsize=(20, 10))
plt.rcParams.update({'font.size': 20})
#Open Data
filename = "smalltest.txt"
data = np.genfromtxt(filename, delimiter = ";", skip_header = 0)
#Colourmap
ax.imshow(data, cmap ='hot', interpolation='nearest')
#-------------------------------------
#Average values around point
#Create circle
circ = patches.Circle((345, 195), 60, alpha=0.8, fc='none',
edgecolor = 'yellow')
ax.add_patch(circ)
fig.colorbar(ax.imshow(data, cmap ='hot', interpolation='nearest'),
label = "Temperature (K)")
plt.show()
Вот изображение в качестве примера:
Создан график. Пытаюсь получить среднее значение внутри нарисованного круга
Комментарии:
1. Для рисования статического круга
patches.Circle
подойдет; чтобы позволить пользователю рисовать круг в интерактивном режиме, вы можете использоватьEllipseSelector
. Чтобы получить данные из массива, который находится в пределах диапазона координат, вы можете создатьnumpy.meshgrid
набор координат и отфильтровать данные по условию для координат. напримерfiltered_data = data[(x-x0)**2 (y-y0)**2 y <= r**2]
. Чтобы вычислить среднее значение массива,use array.mean()
.2. @ImportanceOfBeingErnest похоже,
numpy.meshgrid
это то, что я искал. Большое вам спасибо!