HOWTO · Matplotlib

Como desenhar um retângulo na imagem em Matplotlib

Este artigo de como fazer para desenhar retângulo sobre a imagem em Matplotlib. O retângulo deve ser adicionado à trama pelo método add_patch para desenhar o retângulo sobre a imagem em Matplotlib

Nesta página

Quando precisamos desenhar um retângulo sobre uma imagem ou figura simples em Matplotlib, o retângulo de matplotlib.patches deve ser adicionado aos eixos pelo método add_patch.

Um Matpotlib patch é um artista 2-D que tem uma cor de face e borda. Matplotlib tem patches como,

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

O patch Rectangle desenha um retângulo com uma coordenada especificada de canto inferior esquerdo e largura e altura especificadas.

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

xy é um tuple de comprimento-2 para especificar as coordenadas do canto inferior esquerdo do retângulo a ser desenhado,

width é a largura do retângulo,

height é a altura do retângulo,

angle é o ângulo em graus no sentido anti-horário.

O fill especifica se o retângulo é preenchido com o facecolor.

Alguns kwargs válidos são,

  • edgecolor: a cor das bordas do retângulo
  • facecolor: a cor preenchida do retângulo

Rectângulo de desenho em 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()

O remendo retangular é criado pelo construtor,

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

Sua coordenada inferior esquerda é (1, 1), sua largura é 1 e sua altura é 2.

A cor da borda é especificada como blue, enquanto que a cor preenchida é red.

O método add_patch(P)do objeto Axes acrescenta um Patch - p ao axis.

Matplotlib_draw um retângulo com a cor preenchida

Se o fill estiver definido para ser False, o retângulo não será preenchido mesmo que facecolor seja especificada com alguma cor.

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 um retângulo sem cor de preenchimento

Rectângulo de desenho na imagem em Matplotlib

Se precisarmos desenhar um retângulo sobre uma imagem em Matplotlib, é semelhante à abordagem acima, mas com a etapa extra para obter o cabo 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()

O plt.imshow(im) exibe a imagem butterfly.jpg e o cabo de Axes poderia ser obtido pela função plt.gca()cujo gca significa get current axes.

Matplotlib_draw um retângulo sobre a imagem