pyplot - title matplotlib python




traccia un cerchio con pyplot (4)

sorprendentemente non ho trovato una semplice descrizione su come disegnare un cerchio con matplotlib.pyplot (per favore non pylab) prendendo come centro di input (x, y) e raggio r. Ho provato alcune varianti di questo:

import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()

... ma ancora non ha funzionato.

https://code.i-harness.com


Devi aggiungerlo a un asse. Un Circle è una sottoclasse di un Artist e un axes ha un metodo add_artist .

Ecco un esempio di questo:

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')

Ciò risulta nella seguente figura:

Il primo cerchio è all'origine, ma per impostazione predefinita clip_on è True , quindi il cerchio viene troncato quando si estende oltre gli axes . Il terzo cerchio (verde) mostra cosa succede quando non si aggancia l' Artist . Si estende oltre gli assi (ma non oltre la figura, cioè la dimensione della figura non viene regolata automaticamente per tracciare tutti i tuoi artisti).

Le unità per x, ye radius corrispondono alle unità di dati per impostazione predefinita. In questo caso, non ho tracciato nulla sui miei assi ( fig.gca() restituisce gli assi correnti), e poiché i limiti non sono mai stati impostati, impostano per default un intervallo xey compreso tra 0 e 1.

Ecco una continuazione dell'esempio, che mostra come le unità contano:

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')

che risulta in:

Puoi vedere come ho impostato il riempimento del 2 ° cerchio su False , che è utile per racchiudere i risultati chiave (come il mio punto dati giallo).


Estendere la risposta accettata per un usecase comune. In particolare:

  1. Visualizza i cerchi in un formato naturale.

  2. Estendi automaticamente i limiti degli assi per includere i cerchi appena tracciati.

Esempio autonomo:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.add_patch(plt.Circle((0, 0), 0.2, color='r', alpha=0.5))
ax.add_patch(plt.Circle((1, 1), 0.5, color='#00ffff', alpha=0.5))
ax.add_artist(plt.Circle((1, 0), 0.5, color='#000033', alpha=0.5))

#Use adjustable='box-forced' to make the plot area square-shaped as well.
ax.set_aspect('equal', adjustable='datalim')
ax.plot()   #Causes an autoscale update.
plt.show()

Notare la differenza tra ax.add_patch(..) e ax.add_artist(..) : dei due, solo il primo rende la macchina di scalabilità automatica prendere in considerazione il cerchio (riferimento: discussion ), quindi dopo aver eseguito il codice precedente otteniamo:

Vedi anche: documentazione set_aspect(..) .


Se vuoi tracciare una serie di cerchi, potresti voler vedere questo post o questo aspetto (un po 'più recente). Il post offriva una funzione denominata circles .

I circles funzioni funzionano come scatter , ma le dimensioni dei cerchi tracciati sono nell'unità di dati.

Ecco un esempio:

from pylab import *
figure(figsize=(8,8))
ax=subplot(aspect='equal')

#plot one circle (the biggest one on bottom-right)
circles(1, 0, 0.5, 'r', alpha=0.2, lw=5, edgecolor='b', transform=ax.transAxes)

#plot a set of circles (circles in diagonal)
a=arange(11)
out = circles(a, a, a*0.2, c=a, alpha=0.5, edgecolor='none')
colorbar(out)

xlim(0,10)
ylim(0,10)


#!/usr/bin/python
import matplotlib.pyplot as plt
import numpy as np

def xy(r,phi):
  return r*np.cos(phi), r*np.sin(phi)

fig = plt.figure()
ax = fig.add_subplot(111,aspect='equal')  

phis=np.arange(0,6.28,0.01)
r =1.
ax.plot( *xy(r,phis), c='r',ls='-' )
plt.show()

Oppure, se preferisci, guarda il path s, http://matplotlib.sourceforge.net/users/path_tutorial.html





matplotlib