Я хочу создать тепловую карту, аналогичную той, которая приведена в этом ответе .Разница в том, что я хочу сделать это из двумерного массива значений от 0 до 1.
Что я пробовал:
def generate_x_y_vectors(prob_map):
multiplier = 100
xs = []
ys = []
for y in range(len(prob_map)):
for x in range(len(prob_map[y])):
count = int(prob_map[y][x] * multiplier)
xs.extend([x] * count)
ys.extend([y] * count)
return (xs, ys)
def heatmap(probabilities):
#probabilities is a 2d nxn array
n = len(probability_map)
gridsize = n + 1
(xs, ys) = generate_x_y_vectors(probability_map)
plt.figure()
plt.hexbin(xs, ys, C=None, gridsize=gridsize, mincnt=1)
plt.axis([0, n, 0, n])
Основная проблема в том, что я не могу настроитьразмер сетки, чтобы сделать аккуратную карту - много пустого пространства в конечном итоге создает полосатый эффект /etc.
В любом случае, я бы вообразил, что есть гораздо лучший способ сделать это, не проходя через утомительныйгенерация точек!
В идеале я бы хотел, чтобы какой-то механизм порогового значения определял, строить ли шестиугольник или нет (как я уже делал выше).
Моя мотивация - у меня есть простая 2 переменная Марковацепочка, в которой сумма двух переменных не может превышать некоторого значения, n.У меня есть массив с некоторой вероятностью для каждого начального условия.Таким образом, карта тепла будет треугольником, охватываемым областью x