2017-08-20 3 views
0

J'ai une liste appelée 'samples', je charge plusieurs images dans cette liste à partir de 2 dossiers différents, disons Folder1 et Folder2. Ensuite, je convertis cette liste en un DataFrame et les trace dans un diagramme de dispersion 2D. Je veux que le diagramme de dispersion affiche tous les contenus de Folder1 comme étant de couleur rouge et tous les contenus de Folder2 soient de couleur bleue. Comment puis-je accomplir cela. Mon code est ci-dessous:Différentes couleurs pour les nuages ​​de points basés sur l'origine des données

samples = [] 
    Folder1 = glob.iglob('/home/..../Folder1/*.png') 
    Folder2 = glob.iglob('/home/..../Folder2/*.png') 

    for fname in Folder1: 
     img = misc.imread(fname) 
     samples.append((img[::2, ::2]/255.0).reshape(-1)) 

    for fname in Folder2: 
     img = misc.imread(fname) 
     samples.append((img[::2, ::2]/255.0).reshape(-1)) 

    samples = pd.DataFrame(samples) 

    def do_ISO(df): 
     from sklearn import manifold 
     iso = manifold.Isomap(n_neighbors=6, n_components=3) 
     iso.fit(df) 
     A = iso.transform(df) 
     return A 

    def Plot2D(T, title, x, y): 
     fig = plt.figure() 
     ax = fig.add_subplot(111) 
     ax.set_title(title) 
     ax.set_xlabel('Component: {0}'.format(x)) 
     ax.set_ylabel('Component: {0}'.format(y)) 
     x_size = (max(T[:,x]) - min(T[:,x])) * 0.08 
     y_size = (max(T[:,y]) - min(T[:,y])) * 0.08 
     ax.scatter(T[:,x],T[:,y], marker='.',alpha=0.7) 

    Plot2D(do_ISO(samples), 'ISO_Chart', 0, 1) 

    plt.show() 

Répondre

1

Il est assez difficile de dire sans voir les tableaux avec lesquels vous travaillez. Vous tracez en fait le résultat de votre fonction do_ISO(), qui crée un tableau en utilisant sklearn.manifold.Isomap.transform(). Cette fonction préserve-t-elle l'ordre de vos éléments dans votre baie? Si oui, les choses pourraient être assez faciles. Comme vous remplissez d'abord toutes les images de Folder1 puis de Folder2, vous pouvez simplement compter le nombre d'éléments dans Folder1, et diviser votre tableau en 2 en fonction de ce nombre (par exemple, nbFilesFolder1). Ensuite, vous faites 2 appels à :

ax.scatter(T[:nbFilesFolder1,x],T[:nbFilesFolder1,y], marker='.',alpha=0.7, c='red') 
ax.scatter(T[nbFilesFolder1:,x],T[nbFilesFolder1:,y], marker='.',alpha=0.7, c='blue') 
+0

Diziet Asahi vous venez de le clouer. C'est exactement ce que je voulais. Oui, le Folder1 contient 72 éléments, alors Folder2 contient 12 éléments. Et j'ai utilisé votre technique pour les tracer en divisant le tableau et cela a fonctionné exactement comme je le voulais. Merci beaucoup et je l'apprécie vraiment. C'est vous les gars qui motivent les nouveaux et jeunes analystes de données comme moi à continuer. –