Cambio del estilo del marcador en el diagtwig de dispersión según la tercera variable

Estoy tratando con un diccionario de varias columnas. Quiero trazar dos columnas y luego cambiar el color y el estilo de los marcadores de acuerdo con una tercera y cuarta columna.

Me cuesta cambiar el estilo de marcador en el diagtwig de dispersión de Pylab. Mi enfoque, que funciona para el color, desafortunadamente no funciona para el estilo de marcador.

x=[1,2,3,4,5,6] y=[1,3,4,5,6,7] m=['k','l','l','k','j','l'] for i in xrange(len(m)): m[i]=m[i].replace('j','o') m[i]=m[i].replace('k','x') m[i]=m[i].replace('l','+') plt.scatter(x,y,marker=m) plt.show() 

El problema es que el marker solo puede ser un valor único y no una lista de marcadores, como el parámetro de color .

Puedes hacer una agrupación por valor de marcador para tener las listas x e y que tienen el mismo marcador y trazarlas:

 xs = [[1, 2, 3], [4, 5, 6]] ys = [[1, 2, 3], [4, 5, 6]] m = ['o', 'x'] for i in range(len(xs)): plt.scatter(xs[i], ys[i], marker=m[i]) plt.show() 

O puede trazar cada punto (lo cual no recomendaría):

 x=[1,2,3,4,5,6] y=[1,3,4,5,6,7] m=['k','l','l','k','j','l'] mapping = {'j' : 'o', 'k': 'x', 'l': '+'} for i in range(len(x)): plt.scatter(x[i], y[i], marker=mapping[m[i]]) plt.show() 

Agregando a la respuesta de Viktor Kerkez y usando un poco de Numpy, puedes hacer algo como lo siguiente:

 x = np.array([1,2,3,4,5,6]) y = np.array([1,3,4,5,6,7]) m = np.array(['o','+','+','o','x','+']) unique_markers = set(m) # or yo can use: np.unique(m) for um in unique_markers: mask = m == um # mask is now an array of booleans that van be used for indexing plt.scatter(x[mask], y[mask], marker=um)