Come fare un grafico a dispersione con i cerchi vuoti in Python?
-
30-09-2019 - |
Domanda
In Python, con Matplotlib, come può un grafico a dispersione con Vuoto cerchi essere tracciata? L'obiettivo è quello di disegnare cerchi vuoti intorno alcuni dei dischi colorati già tracciati dal scatter()
, in modo da evidenziare loro, idealmente senza dover ridisegnare i cerchi colorati.
ho cercato facecolors=None
, senza alcun risultato.
Soluzione
documentazione per dispersione:
Optional kwargs control the Collection properties; in particular:
edgecolors:
The string ‘none’ to plot faces with no outlines
facecolors:
The string ‘none’ to plot unfilled outlines
Prova il seguente:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=80, facecolors='none', edgecolors='r')
plt.show()
Nota: Per gli altri tipi di grafici vedono questo post su l'uso di markeredgecolor
e markerfacecolor
.
Altri suggerimenti
Would questi lavori?
plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')
o utilizzando plot ()
plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')
Ecco un altro modo: questo aggiunge un cerchio agli assi corrente, la trama o immagine o qualsiasi altra cosa:
from matplotlib.patches import Circle # $matplotlib/patches.py
def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ):
""" add a circle to ax= or current axes
"""
# from .../pylab_examples/ellipse_demo.py
e = Circle( xy=xy, radius=radius )
if ax is None:
ax = pl.gca() # ax = subplot( 1,1,1 )
ax.add_artist(e)
e.set_clip_box(ax.bbox)
e.set_edgecolor( color )
e.set_facecolor( facecolor ) # "none" not None
e.set_alpha( alpha )
(I cerchi nella foto farti schiacciare da puntini di sospensione a causa imshow aspect="auto"
).
In matplotlib 2.0 c'è un parametro chiamato fillstyle
che consente un migliore controllo sulla strada marcatori vengono riempiti.
Nel mio caso ho usato con errorbars ma funziona per i marcatori in generale
http://matplotlib.org/api/_as_gen/matplotlib.axes. Axes.errorbar.html
fillstyle
accetta i valori seguenti: [ ‘full’ | ‘Left’ | ‘Destra’ | ‘Bottom’ | ‘Top’ | ‘None’]
Ci sono due cose importanti da tenere a mente quando si usa fillstyle
,
1) Se MFC è impostato su qualsiasi tipo di valore che avrà la priorità, quindi, se avete fatto FillStyle impostato a 'none' non avrebbe effetto. Quindi, evitare di utilizzare MFC in congiunzione con FillStyle
2) Si potrebbe voler controllare la larghezza del bordo marcatore (usando markeredgewidth
o mew
), perché se il marcatore è relativamente piccolo e il bordo larghezza è di spessore, i marcatori assomiglieranno pieni, anche se non lo sono.
In seguito è un esempio usando errorbars:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
Quindi presumo che si desidera evidenziare alcuni punti che si adattano a determinati criteri. È possibile utilizzare il comando del Preludio di fare un secondo grafico a dispersione dei punti hightlighted con un cerchio vuoto e una prima chiamata per tracciare tutti i punti. Assicurarsi che il s paramter è sufficientemente piccola per i cerchi vuoti più grandi per racchiudere i più piccoli riempiti.
L'altra opzione è di non usare dispersione e disegnare le patch singolarmente utilizzando il comando cerchio / ellisse. Questi sono in matplotlib.patches, qui è alcuni esempi di codice su come disegnare cerchi rettangoli ecc.