如何让matplotlib的流/箭图在图像坐标中绘图

问题描述:

有没有办法让matplotlib的quiverstreamplot函数使用图像坐标约定(原点在左上角,+ y点向下),而不是标准坐标惯例(原点在左下角,+ y点)?如何让matplotlib的流/箭图在图像坐标中绘图

上下文:

我使用既quiverstreamplot可视化的两个图像之间的光流场。你可以在下面看到一个例子。

Optical flow visualization using streamplot

不幸的是,quiverstreamplot都期望在传统的坐标来定义流场,而我的流场被定义在图像坐标。

在上面的图像中,我手动将流转换为传统坐标,然后将其传递到streamplot。流线显示正确,但轴标签仍处于常规坐标中。注意他们如何不同意前两张图像的轴标签。

我可以手动转换轴标签为好,但有我只得到streamplotquiver明白,流场图像中定义的坐标约定一些简单的方法,并应显示为这样的(在原点左上角,+ y点下降)?

如果您想精确模拟图像轴的显示(包括偏移和y轴反转),那么您可以检索前两个axes其中一个的x和y限制,然后应用他们的streamplot

hax1 = plt.subplot(3, 1, 1) 
hax1.imshow(image1) 

hax2 = plt.subplot(3, 1, 2) 
hax2.imshow(image2) 

hax3 = plt.subplot(3, 1, 3) 
hax3.streamplot(x, y, u, v) 
hax3.set_xlim(hax1.get_xlim()) 
hax3.set_ylim(hax1.get_ylim()) 
+0

其实,这不只是逆转y轴标签,但也垂直翻转图(和移动原点到左上)。所以现在我不必将流场从图像坐标转换为传统坐标,然后将其传递给颤抖/流线图。完善! – SuperElectric

+0

(在添加set_xlim,set_ylim之后):酷;我已经手动将流场的x&y坐标移动了[.5,.5],但是我忘记了这并不反映在坐标轴上。现在,我可以按原样传递流动坐标,不移位和未翻转,并且使流图/颤图和轴标签与imshow保持一致。 – SuperElectric