Я хочу изменить правило, которое использует matplotlib для преобразования числового значения в цвет на тепловой карте.
По моим данным, каждая точка представляет собой комбинацию стратегий (A, R) 2 игроков.Например, игрок 1 предпочитает стратегию R с вероятностью 63%, а игрок 2 предпочитает стратегию R с вероятностью 52%.В таком случае я хочу, чтобы точка была следующего цвета: 255 * 0,63 красный, 255 * 0,52 зеленый, 0 синий.
Можно ли добиться этого с помощью matplotlib?Я знаю, что я могу установить собственную цветовую карту, но на самом деле это просто список цветов (не карта), поэтому он не позволяет переопределить отображение с номера на цвет.Или мне нужно перечислить все цвета со всеми оттенками красного и зеленого в цветовой шкале?
Как я могу отобразить цветную полосу в этом случае?Вероятно, это должно быть 2-D (потому что красный и зеленый цвета увеличиваются независимо
Я попытался отобразить случайную тепловую карту, преобразовав вероятность стратегии в число следующим образом:
255 ^ 3 * probablity(R1) + 255 ^ 2 * probability(R2)
Но проблема в том, чтоцвет на цветовой шкале, когда второй игрок выбрал стратегию R слишком близко к точке, когда оба игрока выбрали стратегию A
def strategy_value(probs):
return round(probs[0][1] * 255) * 255 ** 2 + round(props[1][1] * 255) * 255
data = {
'Lambda': [],
'Mu': [],
'Value': []
}
x_ticks = [round(x, 2) for x in np.linspace(0.01, 3, 10)]
y_ticks = [round(x, 2) for x in np.linspace(0.01, 3, 10)]
for mu in y_ticks:
for l in x_ticks:
data['Lambda'].append(l)
data['Mu'].append(mu)
data['Value'].append(strategy_value(G[l][mu]))
data = pd.DataFrame(data).pivot('Lambda', 'Mu', 'Value')
sns.heatmap(data, ax=ax, vmin=0, vmax=255**3 + 255 ** 2)
cbar = ax.collections[0].colorbar
cbar.set_ticks([0, 255 ** 2, 255 ** 3, 255 ** 3 + 255 ** 2])
cbar.set_ticklabels(['AA', 'AR', 'RA', 'RR'])