Sorprendentemente, no encontré una descripción directa sobre cómo dibujar un círculo con matplotlib.pyplot (por favor, sin pylab) tomando como centro de entrada (x, y) y radio r. Intenté algunas variantes de esto:
import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()
... pero aún así no funcionó.
python
matplotlib
Max Li
fuente
fuente
plt.Circle(..)
dirige amatplotlib.patches.Circle()
. Entonces, una solución sin pyplot seríacircle = matplotlib.patches.Circle(..); axes.add_artist(circle)
.Respuestas:
Necesita agregarlo a los ejes. A
Circle
es una subclase de anArtist
, y anaxes
tiene unadd_artist
método.Aquí hay un ejemplo de hacer esto:
Esto da como resultado la siguiente figura:
El primer círculo está en el origen, pero por defecto lo
clip_on
estáTrue
, por lo que el círculo se recorta cuando se extiende más allá delaxes
. El tercer círculo (verde) muestra lo que sucede cuando no recorta elArtist
. Se extiende más allá de los ejes (pero no más allá de la figura, es decir, el tamaño de la figura no se ajusta automáticamente para representar a todos sus artistas).Las unidades para x, y y radio corresponden a unidades de datos por defecto. En este caso, no tracé nada en mis hachas (
fig.gca()
devuelve los ejes actuales), y dado que los límites nunca se han establecido, el valor predeterminado es un rango x e y de 0 a 1.Aquí hay una continuación del ejemplo, que muestra cómo importan las unidades:
lo que resulta en:
Puede ver cómo configuro el relleno del segundo círculo
False
, lo cual es útil para rodear los resultados clave (como mi punto de datos amarillo).fuente
matplotlib.pyplot.Circle == matplotlib.patches.Circle
evalúaTrue
, por lo que probablemente sean alias.Una versión condensada rápida de la respuesta aceptada, para conectar rápidamente un círculo en una trama existente. Consulte la respuesta aceptada y otras respuestas para comprender los detalles.
Por cierto:
gcf()
significa Obtener figura actualgca()
significa Obtener eje actualfuente
dir(fig)
me muestra más de 30 métodos 'get', perogca
no tiene unget_current_axis
alias. Este tipo de respuestas para tu información son maravillosas.plt.gca()
lugar deplt.gcf().gca()
Si desea trazar un conjunto de círculos, es posible que desee ver esta publicación o esta esencia (un poco más nueva). La publicación ofrecía una función llamada
circles
.La función
circles
funciona comoscatter
, pero los tamaños de los círculos trazados están en la unidad de datos.Aquí hay un ejemplo:
fuente
transform=ax.transAxes
hacer?mplleaflet
? Si es así, ¿podría dar un ejemplo, por favor?matplotlib
, supongo que debería ser compatible,mplleaflet
aunque nunca lo intenté.O, si lo prefiere, mire
path
s, http://matplotlib.sourceforge.net/users/path_tutorial.htmlfuente
Si desea que el "círculo" mantenga una relación de aspecto visual de 1, independientemente de las coordenadas de los datos, puede utilizar el método scatter (). http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.scatter
fuente
Extender la respuesta aceptada para un caso de uso común. En particular:
Ver los círculos en una relación de aspecto natural.
Extienda automáticamente los límites de los ejes para incluir los círculos recién trazados.
Ejemplo autónomo:
Tenga en cuenta la diferencia entre
ax.add_patch(..)
yax.add_artist(..)
: de los dos, solo el primero hace que la maquinaria de autoescalado tenga en cuenta el círculo (referencia: discusión ), por lo que después de ejecutar el código anterior obtenemos:Ver también:
set_aspect(..)
documentación .fuente
fig, ax = plt.subplots()
, de lo contrario obtendrá dos ventanas (una está en blanco).Veo tramas con el uso de (.circle) pero en función de lo que quieras hacer, también puedes probar esto:
fuente
Hola, he escrito un código para dibujar un círculo. Ayudará a dibujar todo tipo de círculos. La imagen muestra el círculo con radio 1 y centro en 0,0 El centro y el radio se pueden editar de cualquier elección.
Buena suerte
fuente
De manera similar al diagrama de dispersión, también puede usar el diagrama normal con estilo de línea circular. Usando el
markersize
parámetro puede ajustar el radio de un círculo:fuente