You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中如何将图片图层叠在矩形绘图上方?

解决Matplotlib图像与矩形图层顺序问题

你的问题核心是Matplotlib默认的图层zorder优先级导致的:imshow加载的图像默认zorder=0,而Rectangle这类图形补丁默认zorder=1——所以哪怕你先画矩形再加载图像,图像还是会被压在底层。

下面给两种可行的解决方法:

方法一:调整绘制顺序(推荐)

先加载图像,再在上方绘制矩形。后绘制的元素默认zorder更高,会自动覆盖在图像上层:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

image_link = r'image.png'
dx = 301
dy = 225
xy0 = (68, 33)

fig = plt.figure()
ax = fig.add_subplot(111)
# 先加载图像
im = plt.imread(image_link)
plt.imshow(im)
# 再绘制矩形,自动在图像上方
ax.add_patch(Rectangle(xy0, dx, dy))
plt.show()

方法二:手动设置zorder参数

如果坚持先画矩形再加载图像,可以给imshow设置高于矩形默认值的zorder(比如2),强制让图像显示在顶层:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

image_link = r'image.png'
dx = 301
dy = 225
xy0 = (68, 33)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.add_patch(Rectangle(xy0, dx, dy))
im = plt.imread(image_link)
# 设置zorder高于矩形默认的1
plt.imshow(im, zorder=2)
plt.show()

扩展:绘制九个不同颜色的矩形

只需多次调用ax.add_patch,传入不同的坐标、尺寸和颜色参数即可,还可以用alpha调整透明度避免遮挡图像:

# 示例参数:(坐标, 宽度, 高度, 颜色)
rect_list = [
    ((68, 33), 301, 225, 'red'),
    ((400, 33), 301, 225, 'green'),
    ((732, 33), 301, 225, 'blue'),
    ((68, 280), 301, 225, 'yellow'),
    ((400, 280), 301, 225, 'cyan'),
    ((732, 280), 301, 225, 'magenta'),
    ((68, 527), 301, 225, 'orange'),
    ((400, 527), 301, 225, 'purple'),
    ((732, 527), 301, 225, 'gray')
]

# 循环绘制所有矩形
for xy, w, h, color in rect_list:
    ax.add_patch(Rectangle(xy, w, h, color=color, alpha=0.5))

内容的提问来源于stack exchange,提问作者LegendWK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:05:20