繁体   English   中英

matplotlib:协调图像imshow的约定与绘图不兼容

[英]matplotlib: coordinates convention of image imshow incompatible with plot

我有一个使用matplotlib.pyplot在图像上绘制点的问题。

众所周知,imshow的惯例是原点位于左上角,x轴指向下方,y轴指向右侧。

但是,当我使用plt.plot()绘制一些点时,这些轴似乎变成x轴指向右侧,y轴指向下方。

这是一个例子。 窗口中显示的光标位置为x = 434和y = 162。 但是,根据imshow的约定,它应该为x = 162和y = 434。

有没有办法让绘图函数遵守imshow的约定,或者只是让imshow将原点放在左下角以遵循绘图的约定。 非常感谢你!

光标位置

plt.imshow有一个称为origin的选项,它将更改原点的放置位置。 从文档:

来源:['upper'| [lower]],可选,默认值:无

将数组的[0,0]索引放置在轴的左上角或左下角。 如果为None,则默认为rc image.origin。

从您的描述看来,您想将origin = 'lower'

要切换x和y轴,还需要转置图像数组。 考虑以下示例:

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook

image_file = cbook.get_sample_data('ada.png')
img = plt.imread(image_file)

fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2)

ax1.imshow(img, origin='upper')
ax2.imshow(img, origin='lower')
ax3.imshow(img.transpose(1,0,2), origin='upper')
ax4.imshow(img.transpose(1,0,2), origin='lower')

ax3.set_xlabel('upper')
ax4.set_xlabel('lower')

ax1.set_ylabel('Not transposed')
ax3.set_ylabel('Transposed')

plt.show()

在此处输入图片说明

我认为您需要右下轴,所以ax4.imshow(img.transpose(1,0,2), origin='lower') 请注意,要转置图像数组,我们必须将RGBA通道保留为最后一个轴,因此(1,0,2)只能转置第一个和第二个轴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM