2012-04-04 13 views
18

Sto cercando di fare un grafico a dispersione di alcuni dati PCA. Faccio un codice abbastanza tipico:marcatori matplotlib scompaiono quando edgecolor = 'none'

plt.plot(pca[:,0], pca[:,1], '.',ms=3, markerfacecolor = self.colors[k], 
      markeredgecolor = 'none') 

voglio per mostrare solo il colore faccia marcatore senza contorno. Il problema è che i marcatori scompaiono completamente quando markeredgecolor = 'none'. Quando imposto markerfacecolor = 'none' o su un colore e rimuovo markeredgecolor, funziona come previsto.

Ho appena aggiornato matplotlib, NumPy, ecc per le versioni più recenti, in esecuzione su Python 2.7.

Grazie per il vostro aiuto.

+3

Si potrebbe provare a impostare il 'markersize' ad un valore maggiore. 'markersize' può essere un kwarg di' plot() ', oppure puoi abbreviare come' ms'. ad es .: '..., markersize = 20, ...' – bernie

+0

Per coloro che provano a fare ciò con 'matplotlib.errorbar' usando' markeredgecolor = None' qui sotto non è stato rimosso il nero che delinea il simbolo. Invece 'markeredgecolor = 'none''did ha funzionato (i simboli non erano invisibili). Non sorprende che il bug che ha portato a questa domanda sia stato corretto negli ultimi 3 anni. –

risposta

15

credo che questo sia un bug che è stato fissato a qualche mese fa: https://github.com/matplotlib/matplotlib/pull/598

Indipendentemente da quanto grande si fanno i marcatori o se si utilizza marker='o' invece di '.', saranno invisibili se si utilizza markeredgecolor='none'.

Per risolvere il problema, si può semplicemente impostare i colori dei bordi per la stessa come i colori del viso.

4

In matplotlib 1.1

>> plt.plot(pca[:,0], pca[:,1], '.', ms=3, markerfacecolor=self.colors[k], 
...   markeredgecolor=None) 

opere (si noti la None invece di 'none' per markeredgecolor).

L'impostazione markeredgewidth=0.0 o markeredgecolor=self.colors[k] (come suggerito da Joe Kington) dovrebbe funzionare anche.

+0

Cosa intendi con 'self.colors [k]'? Quando eseguo il codice simile, si dice 'NameError: name 'self' non è definito'. – LWZ

+0

È preso dalla domanda. Sembra che l'OP stia usando questo comando all'interno di una classe, che ha un attributo colors (che è un dizionario). Puoi sostituirlo con qualsiasi colore matplotlib (ad esempio una stringa come "verde") se vuoi semplicemente usare la riga di codice per tracciare qualcosa. – bmu

3

Prova questo:

x = np.array(np.random.rand(10)) 
y = np.array(np.random.rand(10)) 
c = np.arange(len(x)) 
plt.scatter(x,y, c=c, s=500, cmap = plt.cm.Paired, alpha = 0.5,linewidths=0) 

Oppure, questa è una buona opzione troppo:

plt.scatter(x,y, c=c, s=500, cmap = plt.cm.Paired, alpha = 0.5,edgecolor='face') 
Problemi correlati