首页 > 解决方案 > 范围在 matplotlib 中的真正作用是什么?

问题描述

在导入图像和来自 numpy 的随机数据之后,我最近一直在搞乱 matplotlib。我将图表的范围更改为双倍最大范围(即 20x20 矩阵的 40x40),但它们看起来仍然相同。在这种情况下,我找不到任何关于真正程度的文档。它会复制我的数据、对其进行插值还是其他一些功能?

标签: pythonmatplotlib

解决方案


我想你在这里询问imshow'extent关键字参数。

这用于定义轴中图像的单位。默认情况下,即不设置extent,单位就是数组的像素。例如,如果你有一个 10x10 像素的图像,范围是(-0.5, 9.5, 9.5, -0.5)

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)

data = np.random.rand(10,10)

fig, ax = plt.subplots()

im = ax.imshow(data)
print(im.get_extent())  # prints (-0.5, 9.5, 9.5, -0.5)

在此处输入图像描述

每个像素是一个单位大,整数是像素中心。

但是,您可能希望对图像使用不同的单位。可能您对数据进行了校准,或者数据是使用不同单位的计算结果。在这种情况下,extent可以设置以确定图像将驻留在轴单位的 2D 空间中的哪个位置。例如,如果您希望图像在 x 方向上从 -300 到 300,在 y 方向上从 50 到 450,您可以使用extent=[-300,300,450,50].

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)

data = np.random.rand(10,10)

fig, ax2 = plt.subplots()

ax2.imshow(data, extent=[-300,300,450,50])

plt.show()

在此处输入图像描述

由于默认的相等纵横比 ( aspect="equal"),现在不仅坐标轴坐标范围从 -300 到 300 和 50 到 450 变化,而且图像的形状现在也变为非二次方,即具有 的纵横比(450-50)/(300+300)=0.666

有一个可用的教程originextent它也解释了这一点,此外还阐明了如何确定和操纵轴相对于图像数据的方向。


推荐阅读