es necesario agregar a un eje. Un Circle
es una subclase de Artist
, y un axes
tiene un método add_artist
.
He aquí un ejemplo de hacer esto:
import matplotlib.pyplot as plt
circle1 = plt.Circle((0, 0), 0.2, color='r')
circle2 = plt.Circle((0.5, 0.5), 0.2, color='blue')
circle3 = plt.Circle((1, 1), 0.2, color='g', clip_on=False)
fig, ax = plt.subplots() # note we must use plt.subplots, not plt.subplot
# (or if you have an existing figure)
# fig = plt.gcf()
# ax = fig.gca()
ax.add_artist(circle1)
ax.add_artist(circle2)
ax.add_artist(circle3)
fig.savefig('plotcircles.png')
Esto se traduce en la siguiente figura:

El primer círculo está en el origen, pero por defecto clip_on
es True
, por lo el círculo está recortado cuando se extiende más allá del axes
. El tercer círculo (verde) muestra lo que sucede cuando no se recorta el Artist
. Se extiende más allá de los ejes (pero no más allá de la figura, es decir, el tamaño de la figura es no ajustado automáticamente para trazar todos sus artistas).
Las unidades para x, y y radio corresponden a unidades de datos por defecto. En este caso, no grabé nada en mis ejes (fig.gca()
devuelve los ejes actuales), y como los límites nunca se han establecido, tienen un valor predeterminado de xy entre 0 y 1.
Aquí hay una continuación del ejemplo, mostrando cómo las unidades cuestión:
circle1 = plt.Circle((0, 0), 2, color='r')
# now make a circle with no fill, which is good for hi-lighting key results
circle2 = plt.Circle((5, 5), 0.5, color='b', fill=False)
circle3 = plt.Circle((10, 10), 2, color='g', clip_on=False)
ax = plt.gca()
ax.cla() # clear things for fresh plot
# change default range so that new circles will work
ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
# some data
ax.plot(range(11), 'o', color='black')
# key data point that we are encircling
ax.plot((5), (5), 'o', color='y')
ax.add_artist(circle1)
ax.add_artist(circle2)
ax.add_artist(circle3)
fig.savefig('plotcircles2.png')
que se traduce en:

se puede ver cómo me puse el llenado del segundo círculo para False
, que es útil para rodear resultados clave (como mi punto de datos amarillo).
Estoy seguro de que es posible hacer esto, pero matplotlib está destinado principalmente a trazar (es decir, aquí hay algunos datos, ponerlos en un gráfico), no dibujar, por lo que puede no ser del todo sencillo. –
El radio de los puntos de dispersión se usa cada vez más para visualizar datos. Google charts los llama "trazados de burbujas". Gapminder.org es un buen ejemplo. Este * está * trazando, no dibujando. Busqué en el matplotlib github repo para "burbuja" y "radio de dispersión" en vano, así que no creo que esto esté en la lista de pendientes en cuanto a agregar una característica. –
plt.scatter() toma un argumento de tamaño. Puede pasar listas para las coordenadas xey de los círculos, los radios de los círculos y los colores de los círculos. http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.scatter. Mi error anterior, al pensar que dicha funcionalidad no estaba ya en matplotlib. –