Python中的双色热图

pprl5pva  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(156)

我有以下数据:

my_array = array([[0, 0, 1, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 1, 1],
       [0, 0, 1, 1, 1],
       [0, 1, 1, 0, 0],
       [1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1],
       [0, 1, 0, 1, 0]])

以及

df.values = array([246360,  76663,  29045,  11712,   5526,   3930,   3754,   1677,
         1328])

我正在制作一个热图,如下所示:

import seaborn as sns
import matplotlib.pyplot as plt
cmap = sns.cm.rocket_r
ax = sns.heatmap(my_array, xticklabels=["A", "B", "C", "D", "E"], yticklabels=df.values, cmap = cmap)
ax.set(xlabel='Test Type', ylabel='Number', title='patterns of missingness')
fig=plt.figure(figsize=(40,30), dpi= 20, facecolor='w', edgecolor='k')
fig

我得到了以下结果:

我的问题是,我如何摆脱连续的色标,只选择两种不同的颜色:白色代表0绿色代表1

2vuwiymt

2vuwiymt1#

您可以使用LinearSegmentedColormap而不是当前使用的cmap来完成此操作。

import matplotlib as mpl
cmap = mpl.colors.LinearSegmentedColormap.from_list('my_cmap', ['white', 'green'], 2)

然后在调用sns.heatmap时将ticks参数传递给cbar_kws参数:

ax = sns.heatmap(my_array, xticklabels=["A", "B", "C", "D", "E"],
                 yticklabels=df.values, cmap=cmap, cbar_kws={"ticks":[0,1]})

其中:

如果很清楚绿色和白色代表什么,你也可以用cbar=False关闭cbar。

ax = sns.heatmap(my_array, xticklabels=["A", "B", "C", "D", "E"],
             yticklabels=df.values, cmap=cmap, cbar=False)

相关问题