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.

È stato utile?

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

immagine di esempio

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

immagine di esempio

o utilizzando plot ()

plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')

immagine di esempio

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 )

alt text

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top