如何自定义海滨热图的颜色?

时间:2019-09-18 07:57:55

标签: python colors seaborn heatmap

我使用热图是因为其最终结构,而不是色域本身。

我在下面展示一个小例子。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from pdb import set_trace as bp

dic_data = {'x':    [1, 1, 2, 2, 3, 2, 2, 3, 2, 4, 4, 5],
            'y':    [1, 2, 3, 4, 4, 4, 3, 2, 1, 2, 2, 2],
            'note': [1, 4, 9, 16, 20, 16, 9, 10, 4, 14, 16, 16]}

df = pd.DataFrame.from_dict(dic_data)

df_p  = df.groupby(['x', 'y'])['note'].count().reset_index()
df_p  = df_p.pivot_table('note', 'y', 'x', fill_value = 0).sort_index(level = 0, ascending = False)

dic_parse = {'y': {1: 'Very low',
                   2: 'Low',
                   3: 'Normal',
                   4: 'High'},
             'x': {1: 'VL',
                   2: 'L',
                   3: 'N',
                   4: 'H',
                   5: 'VH'}}

xticklabels = [dic_parse['x'][e] for e in df_p.keys().tolist()]
yticklabels = [dic_parse['y'][e] for e in df_p.index.tolist()]


f, ax = plt.subplots(figsize = (9, 6))
sns.heatmap(df_p, annot = True, fmt = 'd', linewidths = .5, cbar = False, cmap = 'Greens',
            annot_kws = {'size': 50}, xticklabels = xticklabels, yticklabels = yticklabels)

ax.set_xlabel('x', fontsize = 20)
ax.set_ylabel('y', fontsize = 20)
ax.set_ylim([df_p.size / len(df_p.columns), 0])
plt.show()

这应该是执行以下代码的结果:

enter image description here

我要实现的是选择每个单元格中出现的颜色,以使左下三角形为红色(从(N-非常低)和(VL-Normal)到下方),右上三角形为绿色(从(N高)和(VH低)到上方),中间区域为黄色。

这是我的愿望结果:

enter image description here

我不知道这是否可以通过热图或其他功能实现。

非常感谢您。

0 个答案:

没有答案