Python | 如何在Matplotlib中仅绘制热图的上/下三角形

打印 上一主题 下一主题

主题 806|帖子 806|积分 2418

热图是一种强大的可视化工具,用于以矩阵格式表示数据,其中各个值由颜色表示。它们对于可视化相关矩阵特殊有用,其中矩阵的对称性子使得表现上下三角形变得多余。本文将指导您使用Matplotlib(Python中流行的绘图库)仅绘制热图的上三角形或下三角形的过程。
为什么只绘制上三角形或下三角形?

热图是数据的图形表示,其中各个值由颜色表示。在许多环境下,例如相关矩阵,数据是关于对角线对称的。这意味着上三角形中的信息是下三角形中信息的镜像。如果同时删除两个三角形,则大概是多余的,而且会使可视化变得杂乱。通过只绘制一个三角形,我们可以使热图更清晰,更容易表明。
分步实现绘制

要在Matplotlib中只绘制热图的上三角形或下三角形,我们可以使用NumPy创建一个数组,然后使用Matplotlib的imshow函数表现它。以下是详细步骤:
1.导入所需的库
首先,我们需要导入必要的库:NumPy用于数值运算,Matplotlib用于绘图。
  1. import numpy as np
  2. import matplotlib.pyplot as plt
复制代码
2.天生随机数据
为了演示的目的,我们将创建一个随机的5×5矩阵。在现实世界的场景中,这可以是相关矩阵或任何其他数据矩阵。
  1. data = np.random.rand(5, 5)
复制代码
3.为上/下三角形创建掩码
我们可以使用numpy.tri函数来创建一个三角形掩码。此函数天生一个下三角矩阵,对角线下方为1,其他地方为0。为了创建上三角形掩码,我们可以转置下三角形掩码。
  1. # Lower triangle mask
  2. lower_mask = np.tri(data.shape[0], data.shape[1], k=-1)
  3. # Upper triangle mask
  4. upper_mask = lower_mask.T
复制代码
4.将掩码应用于数据
我们使用NumPy的掩码数组功能将掩码应用于我们的数据。这将隐藏上三角形或下三角形中的值。
  1. # Mask the lower triangle
  2. masked_data_lower = np.ma.array(data, mask=lower_mask)
  3. # Mask the upper triangle
  4. masked_data_upper = np.ma.array(data, mask=upper_mask)
复制代码
5.绘制热图
最后,我们使用Matplotlib的imshow函数绘制屏蔽数据。我们可以根据需要自定义色彩映射表和其他绘图设置。
  1. plt.figure(figsize=(8, 6))
  2. # Plot lower triangle heatmap
  3. plt.subplot(1, 2, 1)
  4. plt.title("Lower Triangle Heatmap")
  5. plt.imshow(masked_data_lower, interpolation='nearest', cmap='viridis')
  6. plt.colorbar()
  7. # Plot upper triangle heatmap
  8. plt.subplot(1, 2, 2)
  9. plt.title("Upper Triangle Heatmap")
  10. plt.imshow(masked_data_upper, interpolation='nearest', cmap='viridis')
  11. plt.colorbar()
  12. plt.tight_layout()
  13. plt.show()
复制代码

仅绘制热图的上三角形:实际示例

1.示例:绘制相关矩阵
让我们思量一个实际的例子,我们绘制数据集的相关矩阵。我们将使用Pandas库加载数据集并计算相关矩阵。
  1. import pandas as pd
  2. df = pd.DataFrame({
  3.     'A': np.random.rand(10),
  4.     'B': np.random.rand(10),
  5.     'C': np.random.rand(10),
  6.     'D': np.random.rand(10),
  7.     'E': np.random.rand(10)
  8. })
  9. # Calculate correlation matrix
  10. corr_matrix = df.corr()
  11. # Create upper triangle mask
  12. mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
  13. # Apply mask to the correlation matrix
  14. masked_corr = np.ma.array(corr_matrix, mask=mask)
  15. plt.figure(figsize=(8, 6))
  16. plt.title("Upper Triangle Correlation Matrix")
  17. plt.imshow(masked_corr, interpolation='nearest', cmap='coolwarm', vmin=-1, vmax=1)
  18. plt.colorbar()
  19. plt.xticks(range(len(corr_matrix.columns)), corr_matrix.columns, rotation=90)
  20. plt.yticks(range(len(corr_matrix.columns)), corr_matrix.columns)
  21. plt.show()
复制代码

2.示例:使用Seaborn绘制上三角热图
  1. import seaborn as sns
  2. # Generate a mask for the upper triangle
  3. mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
  4. plt.figure(figsize=(10, 8))
  5. # Draw the heatmap with the mask and correct aspect ratio
  6. sns.heatmap(corr_matrix, mask=mask, cmap='coolwarm', vmax=1, vmin=-1, center=0,
  7.             square=True, linewidths=.5, cbar_kws={"shrink": .5})
  8. plt.title("Upper Triangle Correlation Matrix")
  9. plt.show()
复制代码

总结

仅绘制热图的上三角形或下三角形可以使您的可视化更清晰,更易于表明,特殊是在处理相关矩阵等对称矩阵时。通过使用NumPy创建掩码,使用Matplotlib或Seaborn绘制热图,您可以轻松实现此结果。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表