étonnamment, je n'ai pas trouvé de description simple sur la façon de dessiner un cercle avec matplotlib.pyplot (s'il vous plaît pas de pylab) en prenant comme centre d'entrée (x, y) et rayon r. J'ai essayé quelques variantes de ceci:
import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()
... mais cela ne fonctionnait toujours pas.
python
matplotlib
Max Li
la source
la source
plt.Circle(..)
dirige versmatplotlib.patches.Circle()
. Donc, une solution sans pyplot seraitcircle = matplotlib.patches.Circle(..); axes.add_artist(circle)
.Réponses:
Vous devez l'ajouter à un axe. A
Circle
est une sous-classe de anArtist
et anaxes
a uneadd_artist
méthode.Voici un exemple de cette opération:
Cela donne la figure suivante:
Le premier cercle est à l'origine, mais par défaut
clip_on
estTrue
, de sorte que le cercle est clipsé quand jamais il va au - delà duaxes
. Le troisième cercle (vert) montre ce qui se passe lorsque vous ne coupez pas le fichierArtist
. Il s'étend au-delà des axes (mais pas au-delà de la figure, c'est-à-dire que la taille de la figure n'est pas automatiquement ajustée pour tracer tous vos artistes).Les unités pour x, y et rayon correspondent aux unités de données par défaut. Dans ce cas, je n'ai rien tracé sur mes axes (
fig.gca()
retourne les axes courants), et comme les limites n'ont jamais été définies, elles sont par défaut une plage x et y de 0 à 1.Voici une suite de l'exemple, montrant l'importance des unités:
ce qui se traduit par:
Vous pouvez voir comment j'ai défini le remplissage du 2ème cercle sur
False
, ce qui est utile pour encercler les résultats clés (comme mon point de données jaune).la source
matplotlib.pyplot.Circle == matplotlib.patches.Circle
évalue àTrue
, donc ce sont probablement des alias.Une version condensée rapide de la réponse acceptée, pour brancher rapidement un cercle dans une parcelle existante. Reportez-vous à la réponse acceptée et aux autres réponses pour comprendre les détails.
Au fait:
gcf()
signifie obtenir la figure actuellegca()
signifie Obtenir l'axe actuella source
dir(fig)
me montre plus de 30 méthodes «get», maisgca
n'a pas d'get_current_axis
alias. Ces types de réponses fyi sont merveilleux.plt.gca()
place deplt.gcf().gca()
Si vous souhaitez tracer un ensemble de cercles, vous voudrez peut-être voir cet article ou cet essentiel (un peu plus récent). Le message proposait une fonction nommée
circles
.La fonction
circles
fonctionne commescatter
, mais les tailles des cercles tracés sont en unité de données.Voici un exemple:
la source
transform=ax.transAxes
-on?mplleaflet
? Dans l'affirmative, pourriez-vous donner un exemple, s'il vous plaît?matplotlib
, je suppose qu'il devrait être compatible avecmplleaflet
bien que je n'ai jamais essayé.Ou, si vous préférez, regardez le
path
s, http://matplotlib.sourceforge.net/users/path_tutorial.htmlla source
Si vous souhaitez que le "cercle" conserve un rapport hauteur / largeur visuel de 1, quelles que soient les coordonnées des données, vous pouvez utiliser la méthode scatter (). http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.scatter
la source
Étendre la réponse acceptée pour un cas d'utilisation commun. En particulier:
Affichez les cercles à un rapport hauteur / largeur naturel.
Étendez automatiquement les limites des axes pour inclure les cercles nouvellement tracés.
Exemple autonome:
Notez la différence entre
ax.add_patch(..)
etax.add_artist(..)
: des deux, seul le premier fait que les machines d'autoscaling prennent en compte le cercle (référence: discussion ), donc après avoir exécuté le code ci-dessus, nous obtenons:Voir aussi:
set_aspect(..)
documentation .la source
fig, ax = plt.subplots()
, sinon vous aurez deux fenêtres (l'une est vide).Je vois des parcelles avec l'utilisation de (.circle) mais en fonction de ce que vous voudrez peut-être faire, vous pouvez également essayer ceci:
la source
Bonjour, j'ai écrit un code pour dessiner un cercle. Cela aidera à dessiner toutes sortes de cercles. L'image montre le cercle avec le rayon 1 et le centre à 0,0 Le centre et le rayon peuvent être modifiés de n'importe quel choix.
Bonne chance
la source
De la même manière que le nuage de points, vous pouvez également utiliser un graphique normal avec un style de ligne circulaire. En utilisant le
markersize
paramètre, vous pouvez ajuster le rayon d'un cercle:la source