Comment dessiner un rectangle sur une image dans Matplotlib

  1. Dessiner un rectangle dans Matplotlib
  2. Dessiner un rectangle sur une image dans Matplotlib

Lorsque nous avons besoin de dessiner un rectangle sur une image ou une figure simple dans Matplotlib, le patch rectangle de matplotlib.patches doit être ajouté aux axes par la méthode add_patch.

Un Matpotlib patch est un artiste 2-D qui a une couleur de visage et de bord. Matplotlib a des patchs comme,

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

Le patch Rectangle dessine un rectangle avec une coordonnée spécifiée du coin inférieur gauche et une largeur et une hauteur spécifiées.

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

xy est un tuple de longueur 2 pour spécifier les coordonnées du coin inférieur gauche du rectangle à dessiner,

La width est la largeur du rectangle,

La height est la hauteur du rectangle,

angle est l’angle en degrés dans le sens inverse des aiguilles d’une montre.

Le terme fill indique si le rectangle est rempli avec la facecolor.

Certains kwargs valides le sont,

  • edgecolor: la couleur des bords du rectangle
  • facecolor: la couleur de remplissage du rectangle

Dessiner un rectangle dans 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()

La pièce rectangulaire est créée par le constructeur,

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

La coordonnée de son coin inférieur gauche est (1, 1), sa largeur est 1 et sa hauteur est 2.

La couleur du bord est spécifiée comme étant blue, tandis que la couleur de remplissage est red.

La méthode add_patch(P) de l’objet Axes ajoute un Patch - p à l’ axe.

Matplotlib_draw un rectangle avec une couleur remplie

Si fill est défini comme étant False, le rectangle ne sera pas rempli même si facecolor est spécifié avec une couleur.

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 rectangle sans couleur de remplissage

Dessiner un rectangle sur une image dans Matplotlib

Si nous avons besoin de dessiner un rectangle sur une image dans Matplotlib, c’est similaire à l’approche ci-dessus mais avec l’étape supplémentaire pour obtenir la poignée des 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) affiche l’image butterfly.jpg et le handle des Axes peut être obtenu par la fonction plt.gca() dont gca signifie get current axes.

Matplotlib_draw un rectangle sur l'image