Cómo dibujar un rectángulo en una imagen en Matplotlib

  1. Dibujar el rectángulo en Matplotlib
  2. Dibujar el rectángulo en la imagen en Matplotlib

Cuando necesitemos dibujar un rectángulo en una imagen o figura plana en Matplotlib, el parche de Rectangle de matplotlib.patches debe ser añadido a los ejes por el método add_patch.

Un Matpotlib patch es un artista en 2-D que tiene un color de cara y borde. Matplotlib tiene parches como,

  • Arc
  • Arrow
  • ArrowStyle
  • BoxStyle
  • Circle
  • CirclePolygon
  • ConnectionPatch
  • ConnectionStyle
  • Ellipse
  • FancyArrow
  • FancyArrowPatch
  • FancyBboxPatch
  • Patch
  • Path
  • PathPatch
  • Polygon
  • Rectangle
  • RegularPolygon
  • Shadow
  • Wedge

El parche Rectangle dibuja un rectángulo con una coordenada especificada de la esquina inferior izquierda y una anchura y altura especificadas.

Rectangle(xy, width, height, angle=0.0, fill=True, **kwargs)

xy es una tupla de longitud 2 para especificar las coordenadas de la esquina inferior izquierda del rectángulo a dibujar,

width es el ancho del rectángulo,

La height es la altura del rectángulo,

El angle es el ángulo en sentido contrario a las agujas del reloj en grados.

fill especifica si el rectángulo se rellena con el facecolor.

Algunos kwargs válidos lo están,

  • edgecolor: el color de los bordes del rectángulo
  • facecolor: el color de relleno del rectángulo.

Dibujar el rectángulo en Matplotlib

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig, ax = plt.subplots()

ax.plot([1,4],[1,4])

ax.add_patch(
     patches.Rectangle(
        (1, 1),
        0.5,
        0.5,
        edgecolor = 'blue',
        facecolor = 'red',
        fill=True
     ) )

plt.show()

El parche del rectángulo es creado por el constructor,

patches.Rectangle(
        (1, 1),
        1,
        2,
        edgecolor = 'blue',
        facecolor = 'red',
        fill=True
 )

La coordenada de su esquina inferior izquierda es (1, 1), su ancho es 1 y su altura es 2.

El color del borde se especifica como blue, mientras que el color de relleno es red.

El método add_patch(P) del objeto Axes añade un Patch - p al axis.

Matplotlib_draw un rectángulo con color relleno

Si fill se establece como False, el rectángulo no se rellenará incluso si se especifica facecolor con algún color.

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig, ax = plt.subplots()

ax.plot([1,4],[1,4])

ax.add_patch(
     patches.Rectangle(
        (1, 1),
        1,
        2,
        edgecolor = 'blue',
        facecolor = 'red',
        fill=False      
     ) )

plt.show()

Matplotlib_draw un rectángulo sin color de relleno

Dibujar el rectángulo en la imagen en Matplotlib

Si necesitamos dibujar un rectángulo en una imagen en Matplotlib, es similar al enfoque anterior pero con el paso extra para obtener el mango de Axes.

import matplotlib.pyplot as plt
import matplotlib.patches as patches
from PIL import Image

im = Image.open('butterfly.jpg')

plt.imshow(im)

ax = plt.gca()

rect = patches.Rectangle((80,10),
                 70,
                 100,
                 linewidth=2,
                 edgecolor='cyan',
                 fill = False)

ax.add_patch(rect)

plt.show()

plt.imshow(im) muestra la imagen butterfly.jpg y el handle de Axes podría obtenerse con la función plt.gca() cuyo gca significa get current axes.

Matplotlib_draw a rectangle on image