python title matplotlib - traccia un cerchio con pyplot




3 Answers

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

figure axes

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.




import matplotlib.pyplot as plt
circle1=plt.Circle((0,0),.2,color='r')
plt.gcf().gca().add_artist(circle1)

Una rapida versione condensata della risposta accettata, che si adattava alla mia necessità di collegare rapidamente un cerchio a una trama esistente. Fare riferimento alla risposta accettata e altre risposte per comprendere i dettagli.

A proposito:

  • gcf () significa Ottieni la figura corrente
  • gca () significa Ottieni asse corrente



Se si desidera che il "cerchio" mantenga un rapporto visivo di 1 indipendentemente dalle coordinate dei dati, è possibile utilizzare il metodo scatter (). matplotlib.org/1.3.1/api/…

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]
r = [100, 80, 60, 40, 20] # in points, not data units
fig, ax = plt.subplots(1, 1)
ax.scatter(x, y, s=r)
fig.show()




Related