En supposant que nous ayons un polygone comme polygone = [(x1, y1), (x2, y2), ...], le code suivant affiche le polygone:
import matplotlib.pyplot as plt
plt.fill(*Zip(*polygon))
plt.show()
Par défaut, il essaie d'ajuster le rapport hauteur/largeur afin que le polygone (ou tout autre diagramme) tienne à l'intérieur de la fenêtre, et le change automatiquement pour qu'il tienne même après le redimensionnement. Ce qui est génial dans de nombreux cas, sauf lorsque vous essayez d'estimer visuellement si l'image est déformée. Comment fixer le rapport d'aspect à strictement 1: 1?
(Je ne sais pas si "rapport hauteur/largeur" est le bon terme ici, donc dans le cas contraire - j'ai besoin que les axes X et Y aient une échelle de 1: 1, de sorte que (0, 1) sur X et Y prenne exactement même espace d'écran. Et je dois le garder 1: 1, peu importe comment je redimensionne la fenêtre.)
Est-il utile d'utiliser:
plt.axis('equal')
Il y a, je suis sûr, un moyen de régler cela directement dans le cadre de votre commande plot, mais je ne me souviens pas de l'astuce. Pour le faire après coup, vous pouvez utiliser l'axe actuel et définir son rapport hauteur/largeur avec "set_aspect ('equal')". Dans votre exemple:
import matplotlib.pyplot as plt
plt.fill(*Zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()
J'utilise cela tout le temps et c'est à partir des exemples sur le site Web de matplotlib.
La meilleure chose à faire est d'utiliser:
plt.axis('scaled')
Comme l'a dit Saullo Castro. Parce qu'à égalité, vous ne pouvez pas modifier une limite d'axe sans changer l'autre, donc si vous souhaitez adapter toutes les figures non carrées, vous aurez beaucoup d'espace blanc.
Alternativement, vous pouvez utiliser la classe d'axes .
fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')
Mieux plt.axis('scaling')
, cela fonctionne mieux si vous souhaitez modifier les axes avec xlim()
et ylim()
.