gpt4 book ai didi

python - 为什么 matplotlib.pyplot.imshow 改变它的轴?

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:35 24 4
gpt4 key购买 nike

我尝试在不同的子图中绘制图像,但由于某种原因,图像的轴在绘制时发生了变化。为了证明这一点,在下面的示例中,我将图像绘制在 4×2 的子图网格中,并不断检查第一张图像的轴是否保持不变:

import matplotlib.pyplot as plt
import numpy as np
_,ax = plt.subplots(4,2)
ims = [[None]*2]*4
for i in range(4):
for j in range(2):
plt.sca(ax[i][j])
ims[i][j] = plt.imshow(np.random.rand(10,10))
print(ims[0][0].axes is ax[0][0])

输出表明在绘制第三张图像后,第一张图像的轴发生了变化:

True
True
False
False
False
False
False
False

此外,事实证明这是真的:

ims[0][0].axes is ax[3][0]

输出:

True

这让我感到困扰的原因是我想在以后的步骤中使用 ims[0][0].set_data() 更新图像,但是当我尝试这样做时,它们只会在轴 ax[ 中更新3][0]

如何解释行为,我该如何解决?

最佳答案

这是一个解决方法。您可以创建一个列表并将您的 AxesImage 对象附加到该列表。这按预期工作。

import matplotlib.pyplot as plt
import numpy as np
_,ax = plt.subplots(4,2)
ims2=[]

for i in range(4):
for j in range(2):
im = ax[i][j].imshow(np.zeros(shape=(10,10)), vmin=0, vmax = 1)
ims2.append(im)
print(ims2[0].axes is ax[0][0])

for i in range(4):
for j in range(2):
ims2[i*2+j].set_data(np.random.rand(10,10))

plt.show()

我不能很好地解释这个问题,但它与 python 列表有关。
在这里,您正在使用

ims = [[None]*2]*4

不一样

ims = [ [ None for j in range(2)] for i in range(4)]

尽管这两个命令打印相同的列表。使用第二种方法也适用于您。

关于python - 为什么 matplotlib.pyplot.imshow 改变它的轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41342452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com