import matplotlib.pyplot as plt
import numpy as np
n = 16
im = np.eye(n)
fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(im)
ax = fig.add_subplot(122)
ax.imshow(im, extent=(0, n, 0, n))
plt.show()
Run Code Online (Sandbox Code Playgroud)
我本来希望这样extent,两个数字(几乎)相同,但它们不是:注意 y 轴是如何翻转的。更令人讨厌的是,右边的数字是错误的:原点的值显示为0,而显示为1。
如果我在范围内翻转 y 参数,extent=(0, n, n, 0),我会得到预期的行为。
据我了解, 的extent论点的描述imshow,
范围:标量(左、右、下、上),可选,默认:
None数据坐标中左下角和右上角的位置。如果
None,则图像的位置使得像素中心落在从零开始的(行、列)索引上。
对这种行为并不是很明确。
我的问题是,为什么会发生这种翻转,为什么我们必须在一定程度上反转顶部/底部以获得预期的行为?
编辑
我已经阅读了这个问题,OP 没有提到翻转问题,答案也没有带来问题。
设置origin='lower'元素确实带来了第一个图像像素,(0,0)但图像随后颠倒显示。
我相信有一个简单的解释可以始终如一地解释这些行为,但还不能完全确定。
该imshow有一个参数origin。默认值为origin="upper". 这与 的设置冲突extent,根据文档,它应该设置“左下角和右上角的数据坐标位置”。然而,这仅在origin = "lower"设置时才成立。
我已经提议用这样的句子来扩展文档
“如果您将原点设置为“上”任何 y 坐标,您可以使用范围和/或 ylim 指定需要反转。”
这正是你自己已经发现的。所以选项是:
如果您希望图像在左上角原点:
origin="upper", extent=(0, n, n, 0)
Run Code Online (Sandbox Code Playgroud)如果您希望图像位于左下角:
origin="lower", extent=(0, n, 0, n)
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1038 次 |
| 最近记录: |