如何在热图中设置自定义颜色映射(从数字到点颜色)?

时间:2019-05-14 16:22:23

标签: python matplotlib seaborn heatmap

我想更改规则,该规则使用matplotlib在热图中将数字值转换为颜色。

在我的数据中,每个点都是2个玩家的策略(A,R)的组合。例如。玩家1偏好策略R的概率为63%,玩家2偏好策略R的概率为52%。在那种情况下,我希望点是下一个颜色:255 * 0.63红色,255 * 0.52绿色,0蓝色。

我可以使用matplotlib实现吗?我知道,我可以设置自定义颜色图,但实际上它只是颜色列表(不是图),因此它不允许覆盖从数字到颜色的映射。或者我需要在颜色栏中列出所有带有红色和绿色阴影的所有颜色?

在这种情况下如何显示颜色栏?可能应该是二维的(因为红色和绿色会独立增加

我试图显示随意的热图,将策略概率转换为数字:

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

0 个答案:

没有答案