python - 范围在 matplotlib 中的真正作用是什么?
问题描述
在导入图像和来自 numpy 的随机数据之后,我最近一直在搞乱 matplotlib。我将图表的范围更改为双倍最大范围(即 20x20 矩阵的 40x40),但它们看起来仍然相同。在这种情况下,我找不到任何关于真正程度的文档。它会复制我的数据、对其进行插值还是其他一些功能?
解决方案
我想你在这里询问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
。
有一个可用的教程origin
,extent
它也解释了这一点,此外还阐明了如何确定和操纵轴相对于图像数据的方向。
推荐阅读
- spring - Spring Boot 的 spring-boot:run 不遵守指定的配置文件
- javascript - 在Javascript中按降序对字符串进行排序(最有效)?
- javascript - 即使在父状态更新后,子无状态功能组件也不会更新
- android - 在构建时针对 Android 上的特定构建类型运行测试
- python - neo4j 桌面是否包含可用的 neo4j 数据库
- node.js - Alexa 技能第一次总是失败
- java - ArrayList 上的“未经检查的调用”
- python - 我收到此错误,但我尝试了一切。TypeError:不能将序列乘以“float”类型的非整数
- python - 索引一组,我得到两组而不是一组
- angular - 从Angular 6中的另一个组件更新数组