Как установить пользовательское цветовое отображение (от числа к цвету точки) на тепловой карте? - PullRequest
0 голосов
/ 14 мая 2019

Я хочу изменить правило, которое использует 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'])

Heatmap

...