Matplotlib 热图绘制技巧
Matplotlib 是 Python 中最常用的绘图库,在不同的任务上都有出色的表现。在图像处理和分析任务中,大多数场景中我们都需要在图像上叠加各种标记和图示,展示处理结果和分析方法。本文将介绍如何在 Matplotlib 中加载图像,并用 matplotlib 的方法绘制热图。
阅读更多:Matplotlib 教程
载入图像图片
Matplotlib 提供了很好的图片载入、处理和显示的工具,我们可以轻松地在python中导入图片。载入图片的方法如下:
from matplotlib import image
file_path = 'sample_image.png'
img = image.imread(file_path)
这样就可以将 example_image.png
文件载入到程序中。下面让我们读入一张示例图像,并展示在 Notebook 中。
from matplotlib import pyplot as plt
from matplotlib import image as mpimg
img = mpimg.imread('sample_image.jpg')
plt.imshow(img)
绘制热图
对于图像分析任务中,有时候需要将得到的结果可视化展示在图像上,比如标注出目标区域、将聚类结果可视化展示出来,等等。这时候,我们可以使用 Matplotlib 的线段、矩形、文本等绘制函数描绘,将结果显式展示出来。Matplotlib 提供了许多绘图函数,其中一些常用的绘图函数包括:
- plt.plot()
- plt.scatter()
- plt.bar()
- plt.hist()
- plt.imshow()
Matplotlib 提供了 plt.imshow()
函数,可以将一个二维数组表示的热图映射到图像上。热图其实等价于一个二维表格,其中数值表示颜色强度。我们可以根据需要设定颜色,从而描绘出对应的图像。下面是一些热图绘制实例。
绘制一幅自定义的热图:
import numpy as np
from matplotlib import pyplot as plt
data = np.random.rand(10, 10)*20-10
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()
将二维数组绘制成图像可以发现,图像的颜色主要分为两个阶段。蓝色代表负值,红色代表正值。我们使用 cm.hot
来设定热图绘制的颜色。其中 interpolation
参数用于设定颜色插值方式,取值包括 nearest
、bilinear
、bicubic
、spline16
、spline36
、hanning
、hamming
、hermite
、step
。plt.colorbar()
函数用于绘制颜色条。
绘制在图像上的热力图,和上面的热图绘制步骤类似,只不过需要加上 Image。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import image as mpimg
from numpy.random import randn
# Load image from disk (in RGB format)
im = mpimg.imread('sample_image.png')
# Crop it to make it square
im = im[:im.shape[0]//2,:]
# Show figure with heatmaps
fig, ax = plt.subplots()
ax.imshow(im)
# Add heatmap on top of image
data = randn(5, 20)
heatmap = ax.imshow(data, alpha=0.5, cmap='viridis', interpolation='nearest', extent=[0,im.shape[1],im.shape[0],0])
plt.colorbar(heatmap)
plt.show()
该示例将在 sample_image.png
上展示出随机生成的数值热力图。alpha
参数可以用于设定热图的透明度,从而使图像和热图更好地融合在一起。extent
参数用于设定热图的坐标轴范围和方向,其默认为 (0,1,0,1)
,分别表示 x 轴起点、终点、y 轴起点、终点。
如果需要在图像上描绘出多个热图,可以使用 subplots 方法。下面是一个展示如何在一张图像上描绘出多个不同大小和颜色的热图的示例。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import image as mpimg
# Load image from disk (in RGB format)
im = mpimg.imread('sample_image.png')
# Create 3 subplots and set their axis limits
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(10, 5))
ax1.set_xlim([0, 200])
ax1.set_ylim([300, 0])
ax2.set_xlim([0, 320])
ax2.set_ylim([320, 0])
ax3.set_xlim([0, 256])
ax3.set_ylim([256, 0])
# Add heatmaps to each subplot
data1 = np.random.rand(10, 20)
heatmap1 = ax1.imshow(data1, alpha=0.5, cmap='viridis', interpolation='nearest', extent=[0,200,300,0])
plt.colorbar(heatmap1, ax=ax1)
data2 = np.random.rand(15, 25)
heatmap2 = ax2.imshow(data2, alpha=0.5, cmap='hot', interpolation='nearest', extent=[0,320,320,0])
plt.colorbar(heatmap2, ax=ax2)
data3 = np.random.rand(8, 10)*50
heatmap3 = ax3.imshow(data3, alpha=0.5, cmap='cool', interpolation='nearest', extent=[0,256,256,0])
plt.colorbar(heatmap3, ax=ax3)
# Show plot
plt.show()
可以看到,我们使用 plt.subplots()
创建了 3 个子图,每个子图大小和坐标轴范围都不同。在每个子图上绘制了不同大小和颜色的热图,并使用 plt.colorbar()
方法添加并展示了颜色条。
总结
本文介绍了在 Matplotlib 中加载图像,并在其中描绘热图的方法。我们可以使用 plt.imshow()
和 ax.imshow()
函数在图像上描绘出不同大小、颜色和形状的热图,还可以使用 plt.subplots()
方法在一张图像中描绘出多个热图。这些方法可以帮助我们更好地可视化处理结果,并快速地判断和分析图像。