2013-01-14 19 views
20

Quindi c'è questa guida: http://matplotlib.org/examples/pylab_examples/scatter_symbol.html enter image description hereMatplotlib marcatore custom/simbolo

# http://matplotlib.org/examples/pylab_examples/scatter_symbol.html 
from matplotlib import pyplot as plt 
import numpy as np 
import matplotlib 

x = np.arange(0.0, 50.0, 2.0) 
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0 
s = np.random.rand(*x.shape) * 800 + 500 

plt.scatter(x, y, s, c="g", alpha=0.5, marker=r'$\clubsuit$', 
      label="Luck") 
plt.xlabel("Leprechauns") 
plt.ylabel("Gold") 
plt.legend(loc=2) 
plt.show() 

Ma cosa succede se siete come me e non si desidera utilizzare un pennarello Clubsuit ...

Come fai il tuo pennarello _________?

UPDATE

Quello che mi piace di questo speciale tipo di marcatore è che è facile da regolare con sintassi semplice matplotlib:

from matplotlib import pyplot as plt 
import numpy as np 
import matplotlib 

x = np.arange(0.0, 50.0, 2.0) 
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0 
s = np.random.rand(*x.shape) * 800 + 500 

plt.plot(x, y, "ro", alpha=0.5, marker=r'$\clubsuit$', markersize=22) 
plt.xlabel("Leprechauns") 
plt.ylabel("Gold") 
plt.show() 

enter image description here

+2

hai avuto uno sguardo a [questo] (http://stackoverflow.com/q/2318288/1025391)? – moooeeeep

+0

Sì, lo so. Ma non ha funzionato per me. Quello che mi piace del codice di esempio matplotlib è il 'c = "g"' che interpreto come regolazione del colore per la trama (non ho una shell python nel momento della scrittura per testarlo). – Norfeldt

risposta

37

Così ha scoperto che era basta usare i simboli matematici e non fare riferimento ad alcun marcatore speciale basato sul vettore memorizzato nel modulo matplotlib ...

from matplotlib import pyplot as plt 
import numpy as np 
from numpy.random import randint 
import matplotlib 

x = np.arange(0.0, 100.0, 2.0) 
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0 
s = np.random.rand(*x.shape) * 800 + 500 

markers = ['\\alpha', '\\beta', '\gamma', '\sigma','\infty', \ 
      '\spadesuit', '\heartsuit', '\diamondsuit', '\clubsuit', \ 
      '\\bigodot', '\\bigotimes', '\\bigoplus', '\imath', '\\bowtie', \ 
      '\\bigtriangleup', '\\bigtriangledown', '\oslash' \ 
      '\ast', '\\times', '\circ', '\\bullet', '\star', '+', \ 
      '\Theta', '\Xi', '\Phi', \ 
      '\$', '\#', '\%', '\S'] 

def getRandomMarker(): 
    return "$"+markers[randint(0,len(markers),1)]+"$" 

def getMarker(i): 
    # Use modulus in order not to have the index exceeding the lenght of the list (markers) 
    return "$"+markers[i % len(markers)]+"$" 

for i, mi in enumerate(markers): 
    plt.plot(x[i], y[i], "b", alpha=0.5, marker=getRandomMarker(), markersize=randint(16,26,1)) 
    plt.plot(x[i], y[i]+50, "m", alpha=0.5, marker=getMarker(i), markersize=randint(16,26,1)) 
    # Let's see if their "center" is located where we expect them to be... 
    plt.plot(x[i], y[i]+100, "y", alpha=0.5, marker=getMarker(i), markersize=24) 
    plt.plot(x[i], y[i]+100, "k+", markersize=12, markeredgewidth=2) 

plt.xlabel("x-axis") 
plt.ylabel("y-axis") 
plt.xlim(-5, plt.xlim()[1]+5) 
plt.ylim(0, plt.ylim()[1]*1.1) 
plt.gcf().set_size_inches(12,6) 
plt.show() 

Check Image

+7

Stavo cercando di trovare un 'cuore pieno' dal momento che \ heartsuit è solo un contorno. L'uso di un marcatore Unicode ha funzionato per me: 'marker = ur '$ \ u2665 $'' – patricksurry

+0

Per coloro che sono interessati a rimuovere il corsivo su lettere/parole normali, funziona il comando matematico '\ mathrm' o' \ rm'. Per esempio. 'marker = r '$ \ mathrm {M} $'' per un M. – Andy

Problemi correlati