matplotlib:图像imshow的坐标约定与plot不兼容

时间:2016-06-08 14:53:21

标签: python matplotlib

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

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

但是当我用plt.plot()绘制一些点时,轴看起来变成x轴向右指向,y轴向下指向。

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

有没有办法要求情节功能服从imshow的惯例,或者只是让imshow将原点放在左下方以遵循情节的惯例。非常感谢你!

cursor location

1 个答案:

答案 0 :(得分:4)

plt.imshow有一个名为origin的选项,可以更改原点的位置。来自文档:

  

原产地:['上'| '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()

enter image description here

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