Matplotlib 如何使用’matplotlib.pyplot.imshow’的’extent’参数
在使用Python进行数据可视化时,Matplotlib被广泛应用。其中,pyplot.imshow
函数用于绘制图像。其可以将数组作为图像显示,并支持许多不同的选项,包括extent
参数,该参数用于定义图像的数据范围和坐标轴刻度。在本文中,将会讲述如何使用extent
参数实现更好的图像可视化。
阅读更多:Matplotlib 教程
简介
在Matplotlib中显示图像,我们需要用到pyplot.imshow
函数。该函数针对可视化图像的设定,可以接收以下参数:
X
:表示要绘制的图像数据,它可以是二维数组、三维数组或四维数组。cmap
:指定用于绘制颜色的颜色映射。它可以是字符串,也可以是预先定义的颜色映射对象。aspect
:纵横比,指定图像的形状,可以是“定值”或一个浮点数。interpolation
:指定图像的插值方式,可以是字符串,也可以是插值函数的名称。extent
:指定显示的范围。这是一个四元组(left, right, bottom, top)
,它表示左、右、下和上的坐标。vmin
和vmax
:表示像素值的最小值和最大值。如果未指定,将使用X
数组中的最小值和最大值。
这里,我们将重点关注extent
参数。
什么是extent
参数?
extent
参数是一个四元组(left, right, bottom, top)
。其定义了坐标系的数量和标签。这意味着它不仅可以为图像数据提供坐标范围和标签,还可以为图像坐标和数据坐标提供序列,从而提供上下限边界,用于插值和统计计算。
通常,我们要使用imshow
函数来显示二维或三维数组的图像。在这种情况下,需要使用extent
参数以指定imshow
中图像的坐标范围并标记最大值和最小值。
可以这样理解:如果没有extent
参数,在绘制图像的情况下,imshow
将自动将数组的边缘与图像填充区域的边缘对齐。如果使用extent
,则可以更强制地指定图像的位置,可以方便地看到图像的整体形状。
示例
让我们先来看一个普通的二维数组,可以生成一张图像:
import matplotlib.pyplot as plt
import numpy as np
img = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
plt.imshow(img)
plt.show()
可是,我们发现图像默认的显示范围(即图片)并不是理想的。此时,我们便可以使用extent
参数来设置图像的显示范围并给坐标轴添加标签。
plt.imshow(img, extent=[-1.5, 1.5, -1.5, 1.5])
plt.show()
使用extent
参数绘制图像的一些技巧
使用extent
参数绘制图像时,还有一些技巧可以帮助我们更好地展示图像。
1. 自动调整extent
如果您不知道要将extent
设置为多少,那么可以使用extent = auto
指令自动调整图像的显示范围。这样,在显示图像时,imshow
函数将自动为其指定一个合适的extent
参数。
以下是示例代码:
X = np.arange(-3, 4, 1)
Y = np.arange(-3, 4, 1)
xx, yy = np.meshgrid(X, Y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
plt.imshow(z, extent = 'auto', interpolation='nearest', origin='lower', cmap='seismic')
plt.colorbar()
plt.show()
2. 相对大小的图像
如果您想检查两个图像之间的相对大小,则可以使用extent
参数来调整它们的显示范围。例如,假设您想比较两幅大小不同的图像,您可以使用以下代码:
# 第一个图像
x = np.random.rand(100)
y = np.random.rand(100)
z1 = x + y
extent = [0, 1, 0, 1]
# 第二幅图像
x = np.random.rand(25)
y = np.random.rand(25)
z2 = x + y
extent = [1.1, 1.5, 0, 0.4]
# 绘制两个图像
plt.imshow(z1, extent=extent, origin='lower')
plt.imshow(z2, extent=extent, origin='lower', alpha = 0.7)
plt.show()
3. 与其他图表结合使用
在Matplotlib中,您还可以将图像与其他图表结合使用,例如在网格上绘制蜂窝图。
以下是一个示例代码:
from matplotlib.collections import PatchCollection
from matplotlib.patches import Rectangle
from matplotlib.pyplot import figure
# 创建一个网格
fig, ax = plt.subplots(1)
fig.set_size_inches(10, 10)
numcells = 12
colours = np.random.rand(numcells)
# 为每个单元格定义一个矩形并将其添加到集合中
cells = []
for n in range(numcells):
i = n % 4
j = n // 4
cell = Rectangle((i, j), 1, 1)
cells.append(cell)
p = PatchCollection(cells, cmap='jet', alpha=0.4)
p.set_array(np.array(colours))
# 绘制网格
ax.add_collection(p)
plt.xlabel('x (mm)')
plt.ylabel('y (mm)')
plt.xlim([0, 4])
plt.ylim([0, 3])
# 绘制图像
img = np.random.rand(4, 3)
plt.imshow(img, extent=[0, 4, 0, 3], cmap='gray')
plt.colorbar()
plt.show()
总结
本文介绍了pyplot.imshow
函数中的extent
参数,它被用于指定显示图像的范围和坐标轴标签。我们讲述了extent
参数的用法,以及演示了如何使用该参数来绘制图像、调节显示范围大小和结合其他图表元素。通过本文的学习,您应该已经掌握了使用extent
参数更好地展示图像的技能。