2012-04-04 7 views
18

Ich versuche ein Streudiagramm einiger PCA-Daten zu erstellen. Ich mache einige ziemlich typische Code:Matplotlib-Marker verschwinden, wenn edgecolor = 'none'

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

Ich möchte es nur die Marker-Gesichtsfarbe ohne Umriss zeigen. Das Problem ist, dass die Marker komplett verschwinden, wenn "markeredgecolor = 'none". Wenn ich markerfacecolor = 'none' oder eine Farbe setze und die Markiertegefarbe entferne, funktioniert es wie erwartet.

Ich habe gerade Matplotlib, Numpy, etc. auf die neuesten Versionen aktualisiert, läuft auf Python 2.7.

Danke für Ihre Hilfe.

+3

Sie könnten versuchen, die 'markersize' auf einen größeren Wert zu setzen. 'markersize' kann ein Kwarg für' plot() 'sein, oder Sie können als' ms' abkürzen. z. B .: '..., markersize = 20, ...' – bernie

+0

Für diejenigen, die dies mit 'matplotlib.errorbar' unter Verwendung der unten empfohlenen' markeredgecolor = None' machen wollten, wurde das schwarze Symbol nicht entfernt. Stattdessen funktionierte "markeredgecolor = 'none" (die Symbole waren nicht unsichtbar). Es ist nicht überraschend, dass der Bug, der zu dieser Frage führte, in den letzten 3 Jahren behoben wurde. –

Antwort

15

Ich denke, dies ist ein Bug, der vor ein paar Monaten festgelegt wurde: https://github.com/matplotlib/matplotlib/pull/598

Unabhängig davon, wie groß Sie die Markierungen machen oder wenn Sie marker='o' statt '.' verwenden, werden sie unsichtbar sein, wenn Sie markeredgecolor='none' verwenden.

Um dieses Problem zu umgehen, können Sie die Kantenfarben auf die gleichen Farben einstellen wie die Flächenfarben.

4

In matplotlib 1,1

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

Werke (man beachte die None statt 'none' für markeredgecolor).

Einstellung markeredgewidth=0.0 oder markeredgecolor=self.colors[k] (wie von Joe Kington vorgeschlagen) sollte auch funktionieren.

+0

Was meinst du mit 'self.colors [k]'? Wenn ich den ähnlichen Code ausführe, heißt es 'NameError: Name 'self' ist nicht definiert. – LWZ

+0

Es ist von der Frage übernommen. Scheint so, als würde der OP diesen Befehl innerhalb einer Klasse benutzen, die ein Farben-Attribut hat (was ein Wörterbuch ist). Sie können es durch eine beliebige Matplotlib-Farbe (z. B. eine Zeichenfolge wie "grün") ersetzen, wenn Sie nur die Codezeile verwenden möchten, um etwas zu zeichnen. – bmu

3

Versuchen Sie folgendes:

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) 

Oder ist dies eine gute Option zu:

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