matplotlib nuage de points avec des marqueurs différents et de couleurs
Je voudrais faire une intrigue avec des marqueurs différents et de différentes couleurs selon les valeurs de 2 externe vecteurs.
Ici ce que j'ai essayé:
>>> s = [u'+', u'+', u'o']
>>> col = ['r','r','g']
>>> x = np.array([1,2,3])
>>> y = np.array([4,5,6])
>>> pl.scatter(x,y,marker=s,c=col)
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/matplotlib/markers.py", line 233, in set_marker
Path(marker)
File "/usr/lib/python3/dist-packages/matplotlib/path.py", line 133, in __init__
vertices = np.asarray(vertices, np.float_)
File "/usr/lib/python3/dist-packages/numpy/core/numeric.py", line 460, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: could not convert string to float: '+'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 3087, in scatter
linewidths=linewidths, verts=verts, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axes.py", line 6298, in scatter
marker_obj = mmarkers.MarkerStyle(marker)
File "/usr/lib/python3/dist-packages/matplotlib/markers.py", line 162, in __init__
self.set_marker(marker)
File "/usr/lib/python3/dist-packages/matplotlib/markers.py", line 236, in set_marker
raise ValueError('Unrecognized marker style {}'.format(marker))
ValueError: Unrecognized marker style ['+', '+', 'o']
>>>
EDIT:
La solution proposée travaux sur la simulation de l'exemple, mais il ne fonctionne pas sur mon vrai problème. (Je ne sais pas pourquoi).
Voici mon code complet :
import matplotlib.pyplot as pl
import numpy as np
locY = np.linspace(0, 1, 50) #in the real data locX and locY are coordinate of the points
locX = np.linspace(0,1,50)
p = 50
C = {0: [0, 13, 14, 19, 22, 30], 16: [1, 16, 17], 20: [15, 18, 20, 24], 37: [4, 8, 9, 33, 37, 40, 47], 41: [5, 7, 28, 32, 34, 36, 39, 41, 42, 44, 46], 26: [6, 26, 27, 29, 31, 35], 45: [10, 11, 12, 38, 43, 45, 48, 49], 21: [2, 3, 21, 23, 25]}
index = C.keys()
def plot_cluster(C, index):
color_map = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w']
colors = []
m_type = []
for i in range(p):
for pos, k in enumerate(index):
if i in C[k]:
#colors.append(pos)
colors.append(color_map[pos])
if i == k:
m_type.append(u'+')
else:
m_type.append(u'o')
fig = pl.scatter(locX, locY, c=colors, s=30, cmap='spectral')
fig = pl.locator_params(nbins=3)
fig = pl.xlim(-0.2, 1.2)
fig = pl.ylim(-0.2, 1.2)
fig = pl.locator_params(nbins=5, axis='y')
return fig
pl.show(plot_cluster(C, index))
Si je remplace le tracé de la partie avec la proposition de réponse-je obtenir seulement 2 points de l'intrigue (je ne sais pas pourquoi)
Comment puis-je le résoudre?
OriginalL'auteur Donbeo | 2014-10-21
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne:
Rendu comme ceci:
Mise à jour
Il semble que vous pouvez avoir une variété de couleurs et ont un seul appel à la fonction scatter: exemple. Les multiples couleurs est confirmé sur le API mais il ne lit pas que vous pouvez spécifier un objet iterable pour le marqueur kwarg. Votre code fonctionne si vous supprimez
marker=s
Si j'essaie d'exécuter ce code, j'obtiens le message "AttributeError: 'module' objet n'a pas d'attribut "show"," c'est à dire un problème avec la dernière ligne. Pouvez-vous vérifier de nouveau
il fonctionne pour moi. Faire attention à l'indentation et l'utilisation d'import matplotlib.pyplot que pl et import numpy comme np au début
Le pyplot importation est généralement fait comme
plt
, paspl
.OriginalL'auteur Noel Evans