绘制二维热图

2025-02-14 09:50:00
admin
原创
77
摘要:问题描述:我想使用 Matplotlib 绘制二维热图。我的数据是一个 n×n Numpy 数组,每个数组的值都在 0 到 1 之间。因此,对于此数组的 (i, j) 元素,我想在热图中的 (i, j) 坐标处绘制一个正方形,其颜色与数组中元素的值成比例。我怎样才能做到这一点?解决方案 1:该imshow()...

问题描述:

我想使用 Matplotlib 绘制二维热图。我的数据是一个 n×n Numpy 数组,每个数组的值都在 0 到 1 之间。因此,对于此数组的 (i, j) 元素,我想在热图中的 (i, j) 坐标处绘制一个正方形,其颜色与数组中元素的值成比例。

我怎样才能做到这一点?


解决方案 1:

imshow()函数带有参数interpolation='nearest'cmap='hot'应该执行您想要的操作。

请查看interpolation参数详细信息,并参阅imshow和图像抗锯齿的插值。

import matplotlib.pyplot as plt
import numpy as np

a = np.random.random((16, 16))
plt.imshow(a, cmap='hot', interpolation='nearest')
plt.show()

示例代码生成的示例颜色图

解决方案 2:

Seaborn是 matplotlib 的高级 API,它负责大量的手动工作。

seaborn.heatmap自动在图表侧面绘制渐变等。

import numpy as np
import seaborn as sns
import matplotlib.pylab as plt

uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, linewidth=0.5)
plt.show()

在此处输入图片描述

您甚至可以绘制方阵的上/下左/右三角形。例如,相关矩阵是正方形且对称的,因此绘制所有值将是多余的。

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
    ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True,  cmap="YlGnBu")
    plt.show()

在此处输入图片描述

解决方案 3:

我会使用 matplotlib 的pcolor / pcolormesh函数,因为它允许数据的不均匀间距。

取自matplotlib的示例:

import matplotlib.pyplot as plt
import numpy as np

# generate 2 2d grids for the x & y bounds
y, x = np.meshgrid(np.linspace(-3, 3, 100), np.linspace(-3, 3, 100))

z = (1 - x / 2. + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
# x and y are bounds, so z should be the value *inside* those bounds.
# Therefore, remove the last value from the z array.
z = z[:-1, :-1]
z_min, z_max = -np.abs(z).max(), np.abs(z).max()

fig, ax = plt.subplots()

c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max)
ax.set_title('pcolormesh')
# set the limits of the plot to the limits of the data
ax.axis([x.min(), x.max(), y.min(), y.max()])
fig.colorbar(c, ax=ax)

plt.show()

pcolormesh 图输出

解决方案 4:

对于二维numpy数组,简单使用imshow()可能会有所帮助:

import matplotlib.pyplot as plt
import numpy as np


def heatmap2d(arr: np.ndarray):
    plt.imshow(arr, cmap='viridis')
    plt.colorbar()
    plt.show()


test_array = np.arange(100 * 100).reshape(100, 100)
heatmap2d(test_array)

示例代码的热图

此代码生成连续的热图。

colormap您可以从这里选择另一个内置功能。

解决方案 5:

以下是如何从 csv 进行操作:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# Load data from CSV
dat = np.genfromtxt('dat.xyz', delimiter=' ',skip_header=0)
X_dat = dat[:,0]
Y_dat = dat[:,1]
Z_dat = dat[:,2]

# Convert from pandas dataframes to numpy arrays
X, Y, Z, = np.array([]), np.array([]), np.array([])
for i in range(len(X_dat)):
        X = np.append(X, X_dat[i])
        Y = np.append(Y, Y_dat[i])
        Z = np.append(Z, Z_dat[i])

# create x-y points to be used in heatmap
xi = np.linspace(X.min(), X.max(), 1000)
yi = np.linspace(Y.min(), Y.max(), 1000)

# Interpolate for plotting
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')

# I control the range of my colorbar by removing data 
# outside of my range of interest
zmin = 3
zmax = 12
zi[(zi<zmin) | (zi>zmax)] = None

# Create the contour plot
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.rainbow,
                  vmax=zmax, vmin=zmin)
plt.colorbar()  
plt.show()

其中dat.xyz形式为

x1 y1 z1
x2 y2 z2
...

解决方案 6:

使用matshow()包装器imshow来设置显示矩阵的有用默认值。

a = np.diag(range(15))
plt.matshow(a)

在此处输入图片描述

https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.matshow.html

这只是一个包装 imshow 的便利函数,用于设置显示矩阵的有用默认值。特别是:

  • origin='upper'

  • interpolation='nearest'

  • aspect='equal'

  • 刻度位于左侧和上方。

  • 刻度被格式化以显示整数索引。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2809  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1713  
  PLM(产品生命周期管理)项目管理系统在企业产品研发与管理过程中扮演着至关重要的角色。然而,在项目推进过程中,资源冲突是不可避免的问题,它会影响项目进度、质量,甚至导致项目失败。有效解决资源冲突对于PLM项目管理系统的成功运行至关重要。接下来,我们将探讨应对资源冲突的5大策略。合作策略合作策略是一种双赢的解决方式。在P...
国内plm系统排名   7  
  产品生命周期管理(PLM)软件近年来在企业数字化转型进程中扮演着愈发重要的角色。对于中小企业而言,PLM软件的应用不仅是提升管理效率的工具,更是实现业务创新与可持续发展的关键助力。它涵盖了从产品的概念设计、研发、生产、销售到售后服务的全流程管理,通过整合企业内外部资源,优化业务流程,为企业创造显著的价值。然而,中小企业...
plm系统   9  
  项目复盘是项目管理中的重要环节,它能够帮助团队总结经验教训,提升后续项目的执行能力。PLM(产品生命周期管理)系统作为整合产品全生命周期信息的平台,为项目复盘提供了强大的支持。通过PLM系统实现项目复盘,能够更高效、全面地审视项目过程,挖掘潜在问题,为未来项目的成功奠定基础。明确复盘目标与范围明确复盘目标是项目复盘的首...
plm是什么意思   8  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用