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
相关产品推荐
相关产品推荐

