在Matplotlib中仅绘制热力图的上/下三角

在Matplotlib中仅绘制热力图的上/下三角

在数据可视化领域,热力图无疑是一种流行的图表类型。对于一维或二维的数据,热力图能够清晰的呈现数据分布的情况。然而,有时候我们只需要展示数据的部分内容,比如仅绘制热力图的上半部分或下半部分。本文将介绍如何用Matplotlib实现仅绘制热力图的上/下三角。

示例数据

我们使用一个简单的数据集,其中每个标签对应的的权值在0到1之间:

import numpy as np

data = np.random.rand(5, 5)
labels = ['A', 'B', 'C', 'D', 'E']

绘制一个默认的热力图的代码:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
heatmap = ax.pcolor(data)

# 热力图的颜色选项
heatmap.set_cmap('YlOrBr')

# 列的标签对齐到中心
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)

# 用标签代替数字
ax.set_xticklabels(labels, minor=False)
ax.set_yticklabels(labels, minor=False)

# 隐藏坐标轴
ax.xaxis.tick_top()
ax.invert_yaxis()

plt.show()

绘制上半部分的热力图

我们通过掩码的方式,仅显示热力图的上半部分。首先,我们定义一个上三角掩码矩阵,其下三角为0,上三角为1.

mask = np.zeros_like(data)
mask[np.triu_indices_from(mask)] = True

我们用numpytriu_indices_from函数,从一个矩阵中生成上三角元素的坐标。然后将对应的元素值设为1。

接下来在绘制热力图时,设置这个掩码矩阵。

heatmap = ax.pcolor(data, mask=mask)

完整上半部分代码:

import numpy as np
import matplotlib.pyplot as plt

# 数据
data = np.random.rand(5, 5)
labels = ['A', 'B', 'C', 'D', 'E']

# 上三角掩码
mask = np.zeros_like(data)
mask[np.triu_indices_from(mask)] = True

# 绘制图表
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, mask=mask)

# 颜色选项
heatmap.set_cmap('YlOrBr')

# 列的标签对齐到中心
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)

# 用标签代替数字
ax.set_xticklabels(labels, minor=False)
ax.set_yticklabels(labels, minor=False)

# 隐藏坐标轴
ax.xaxis.tick_top()
ax.invert_yaxis()

plt.show()

绘制下半部分的热力图

绘制下半部分的热力图,可以用和上半部分相同的方法。我们只需要把上三角掩码变成下三角,即可。

mask = np.zeros_like(data)
mask[np.tril_indices_from(mask)] = True

注意此处,我们用的是tril_indices_from函数,从一个矩阵中生成下三角元素的坐标。然后将对应的元素值设为1。

完整下半部分代码:

import numpy as npimport matplotlib.pyplot as plt

# 数据
data = np.random.rand(5, 5)
labels = ['A', 'B', 'C', 'D', 'E']

# 下三角掩码
mask = np.zeros_like(data)
mask[np.tril_indices_from(mask)] = True

# 绘制图表
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, mask=mask)

# 颜色选项
heatmap.set_cmap('YlOrBr')

# 列的标签对齐到中心
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)

# 用标签代替数字
ax.set_xticklabels(labels, minor=False)
ax.set_yticklabels(labels, minor=False)

# 隐藏坐标轴
ax.xaxis.tick_top()
ax.invert_yaxis()

plt.show()

结论

通过切割掩码矩阵,我们可以轻松地只展示热力图的上/下三角。这种技术可以用于在多个图表中高亮显示重要数据,或者简单地掩盖不想展示的数据区域。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程