Matplotlib绘制矩形覆盖在图像上,矩形指定为图像坐标。

3

我要绘制这样一张图片

fig, ax = plt.subplots()
ax.imshow(im, cmap = "gray")

我想在图像上方绘制一个矩形,使用以下参数(以图像坐标为单位):
(0、0、240、210)
(顶部,左侧,宽度,高度)
矩形修补程序的文档说第一个参数是指定矩形“左下角”的元组。
rect = mpatches.Rectangle((0, 0 + 210), 240, 210, fill = False, linewidth = 2, edgecolor = randHex())
ax.add_patch(rect)

绘制后,矩形显示在错误的位置,我不确定原因。我认为这是图像坐标与matplotlib坐标系统之间存在某种坐标系不匹配。

编辑:如果我只使用 (0, 0),它可以正常工作,但这与文档不一致。


@DjaballahDJEDID 你介意说一下为什么吗?如果我没记错的话,那应该是矩形的右上角。 - Carpetfizz
2个回答

7
如果轴从上到下,那么矩形的底部实际上是顶部,以数据坐标为基准。不过,一个始终成立的事实是,矩形的
plt.Rectangle((x, y), w, h)

将矩形从(x,y)扩展为(x+w, y+h)

因此,当我们在具有不同方向的x和y轴的轴中绘制相同的矩形plt.Rectangle((1,2), 2, 1)时,它会呈现出不同的外观。

import matplotlib.pyplot as plt

def plot_rect(ax):
    rect = plt.Rectangle((1,2), 2, 1)
    ax.add_patch(rect)
    ax.scatter([1], [2], s=36, color="k", zorder=3)


fig, axs = plt.subplots(2,2)

xlims = ((-4,4), (-4,4), (4,-4), (4,-4))
ylims = ((-4,4), (4,-4), (-4,4), (4,-4))

for ax, xlim, ylim in zip(axs.flat, xlims, ylims):
    plot_rect(ax)
    ax.set(xlim=xlim, ylim=ylim)

plt.show()

enter image description here


0

我猜你读错文档了!哈哈 好吧,坐标从矩形的左上角开始。

(x, y, w, h)

(x, y) 是矩形左上角的坐标,其中 (w, y) 表示矩形的宽度和高度。

希望能有所帮助。 平安出去。


谢谢,这确实更有意义,但请看一下这个链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.patches.Rectangle.html - Carpetfizz
文档中肯定有错误,那些只是左上角的坐标。虽然我不明白文档怎么可能错了。我们程序员只关心对我们有效的东西哈哈。所以,不要太担心文档。如果你想验证一下,可以看看这个链接:https://www.youtube.com/watch?v=53ucZ6_7_t4 如果我的解决方案对你有用,请勾选绿色的勾!那就太好了。 - Parthik B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接