2013-01-14 11 views
20

Więc nie jest to przewodnik: http://matplotlib.org/examples/pylab_examples/scatter_symbol.html enter image description herematplotlib niestandardowy znacznik/symbol

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

Ale co, jeśli jesteś podobny do mnie i nie chce użyć znacznika clubsuit ...

Jak czy tworzysz własny znacznik _________?

UPDATE

Co lubię o tym szczególnym rodzaju markera jest to, że łatwo dopasować z prostym matplotlib składnię:

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

trzeba było zapoznać się [to] (http://stackoverflow.com/q/2318288/1025391)? – moooeeeep

+0

Tak, rzeczywiście. Ale mi się nie udało. To, co podoba mi się w przykładowym kodzie matplotlib to "c =" g ", które interpretuję jako dostosowanie koloru dla wykresu (nie ma powłoki Pythona w momencie pisania, aby ją przetestować). – Norfeldt

Odpowiedz

37

więc okazało się, że był tylko używanie symboli matematycznych i nie odwoływanie się do żadnego specjalnego markera wektorowego przechowywanego w module 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

Próbowałem znaleźć "wypełnione serce", ponieważ \ "dres" to tylko zarys. Używanie znacznika unicode zadziałało dla mnie: 'marker = ur '$ \ u2665 $' ' – patricksurry

+0

Dla osób zainteresowanych usunięciem kursywy na zwykłych literach/słowach, działa polecenie' \ mathrm' lub '\ rm' mathtext. Na przykład. 'marker = r '$ \ mathrm {M} $'' dla M. – Andy