我有使用matplotlib.pyplot在图像上绘制点的问题。
众所周知,imshow的惯例是原点位于左上角,x轴指向下方,y轴指向右方。
但是当我用plt.plot()绘制一些点时,轴看起来变成x轴向右指向,y轴向下指向。
这是一个例子。窗口中显示的光标位置是x = 434和y = 162。但是,根据imshow的惯例,它应该是x = 162和y = 434。
有没有办法要求情节功能服从imshow的惯例,或者只是让imshow将原点放在左下方以遵循情节的惯例。非常感谢你!
答案 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()
我认为你想要右下轴,所以ax4.imshow(img.transpose(1,0,2), origin='lower')
。请注意,要转置图像数组,我们必须将RGBA通道保留为最后一个轴,因此(1,0,2)
,只能转置第一个和第二个轴。