Matplotlib 在图像上绘制矩形,矩形在图像坐标中指定

Car*_*izz 3 python matplotlib

I\xe2\x80\x99m 绘制这样的图像

\n\n
fig, ax = plt.subplots()\nax.imshow(im, cmap = "gray")\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想使用以下参数(在图像坐标中)在图像顶部绘制一个矩形

\n\n

(0、0、240、210)

\n\n

(顶部、左侧、宽度、高度)

\n\n

矩形补丁的文档说第一个参数是一个元组,指定矩形的 \xe2\x80\x9cbottom left\xe2\x80\x9d 。

\n\n
rect = mpatches.Rectangle((0, 0 + 210), 240, 210, fill = False, linewidth = 2, edgecolor = randHex())\nax.add_patch(rect)\n
Run Code Online (Sandbox Code Playgroud)\n\n

绘制此图后,矩形显示在错误的位置,我\xe2\x80\x99m 不知道为什么。我认为在 matplotlib\xe2\x80\x99s 坐标系中使用的图像坐标之间存在 \xe2\x80\x99s 某种坐标系不匹配。

\n\n

编辑:如果我只是使用(0, 0)它工作正常,但 \xe2\x80\x99s 与文档不一致。

\n

Imp*_*est 7

如果轴从上到下,则从数据坐标中看,矩形的底部实际上是顶部。然而,永远正确的是,矩形

plt.Rectangle((x, y), w, h)
Run Code Online (Sandbox Code Playgroud)

从 扩展(x,y)(x+w, y+h)

plt.Rectangle((1,2), 2, 1)因此,当我们在 x 轴和 y 轴方向不同的轴上绘制相同的矩形时,它看起来会有所不同。

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述