【问题标题】:Python seaborn.heatmap define categories manuallyPython seaborn.heatmap 手动定义类别
【发布时间】:2020-04-20 09:38:47
【问题描述】:

我目前正在做一个项目,我必须绘制热图并且需要手动将颜色编码的类别设置为 3 个固定值(低于 4->黄色,介于 4 和 5-> 橙色,高于 5- > 红色)。我该怎么做?这是一个最小的工作示例

import numpy as np
import seaborn as sns; sns.set()
m=[[4.09411765, 5.09411765, 6.09411765],[3.09411765, 4.09411765, 5.09411765], [2.09411765, 3.09411765, 4.09411765]]
m=np.matrix(m)
sns.heatmap(m,  annot=True)
plt.show()

非常感谢您。

【问题讨论】:

    标签: python colors seaborn heatmap


    【解决方案1】:

    您可以创建一个ListedColormap。可以选择使用范围箭头绘制颜色条。

    from matplotlib import pyplot as plt
    from matplotlib.colors import ListedColormap
    import numpy as np
    import seaborn as sns; sns.set()
    
    m = np.matrix([[4.09411765, 5.09411765, 6.09411765],
                   [3.09411765, 4.09411765, 5.09411765],
                   [2.09411765, 3.09411765, 4.09411765]])
    sns.heatmap(m, annot=True, cmap=ListedColormap(['yellow', 'orange', 'r']), vmin=3, vmax=6,
                cbar_kws={'ticks': [4, 5], 'extend': 'both'})
    plt.show()
    

    【讨论】:

    • 我还有一个问题。不幸的是,我不得不稍微修改您的代码(低于 3-> 黄色,介于 3 和 5-> 橙色,高于 5-> 红色)。现在似乎改变了不同图之间的颜色编码:''' sns.heatmap(m, annot=True, ax=ax, linewidths=.3, cmap=ListedColormap(['yellow', 'orange', 'r ']), vmin=2, vmax=6,cbar_kws={'ticks': [3, 5], 'extend': 'both'}) '''
    • 使用..., vmin=1, vmax=7, cbar_kws={'ticks': [3, 5], 'extend': 'both'})ListedColormap 创建大小相等的区域。或者,您可以将橙色翻倍:..., cmap=ListedColormap(['yellow', 'orange', 'orange', 'r']), vmin=2, vmax=6, cbar_kws={'ticks': [3, 5], 'extend': 'both'})
    • 非常感谢。我以不同的方式解决了它:我使用分类 (0,1,2) 创建了一个新数组,然后使用 np.imshow 进行着色并在其上绘制文本。有了这个,使用不同矩阵的循环就更容易了。 :)
    • 你也可以试试tick1 = 3; tick2 = 5..., cmap=ListedColormap(['yellow', 'orange', 'orange', 'r']), vmin=2*tick1-tick2, vmax=2*tick2-tick1, cbar_kws={'ticks': [tick1, tick2], 'extend': 'both'})
    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多