使用海运热图高亮显示每行的最小值

Highlight minimum values every row using seaborn heatmap(使用海运热图高亮显示每行的最小值)
本文介绍了使用海运热图高亮显示每行的最小值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用相同的颜色突出显示每行的最小值:

例如,第一行的最小值为0.3。我想用蓝色突出它。同样,对于第二行,为0.042,依此类推。

这是代码。

import numpy as np
import seaborn as sns
import matplotlib.pylab as plt
from matplotlib.patches import Rectangle

Pe = np.random.rand(5,5)

annot=True
fig, ax1 = plt.subplots(1)    
ax1 = sns.heatmap(Pe, linewidth=0.5,ax=ax1,annot=annot)

推荐答案

您可以遍历各行,找到最小值的索引,然后在那里绘制一个矩形。设置clip_on=False可防止矩形被边框剪裁。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

Pe = np.random.rand(5, 5)

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 4))
sns.set_style('white')

sns.heatmap(Pe, linewidth=0.5, annot=True, ax=ax1)
for ind, row in enumerate(Pe):
    min_col = np.argmin(row)
    ax1.add_patch(plt.Rectangle((min_col, ind), 1, 1, fc='none', ec='skyblue', lw=5, clip_on=False))

sns.heatmap(Pe, mask=Pe != Pe.min(axis=1, keepdims=True), annot=True, lw=2, linecolor='black', clip_on=False,
            cmap=ListedColormap(['skyblue']), cbar=False, ax=ax2)
plt.tight_layout()
plt.show()

ps:要创建动画,Celluloid library是一个轻量级选项:

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import seaborn as sns
import numpy as np
from celluloid import Camera

Pe = np.random.rand(5, 5)

fig, ax1 = plt.subplots()
camera = Camera(fig)
sns.set_style('white')

row_array = np.arange(Pe.shape[0]).reshape(-1, 1)
for row in range(Pe.shape[0]):
    sns.heatmap(Pe, mask=(Pe != Pe.min(axis=1, keepdims=True)) | (row < row_array),
                annot=True, lw=2, linecolor='black', clip_on=False,
                cmap=ListedColormap(['skyblue']), cbar=False, ax=ax1)
    camera.snap()

animation = camera.animate(interval=800)
animation.save('animation.gif')
plt.show()

对于更复杂的动画,可以考虑matplotlib的animation API。

这篇关于使用海运热图高亮显示每行的最小值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)