2016-08-07 9 views
0

Ich möchte eine Legende unter dem Bild von der spectral-Modul gezeichnet. Ich frage mich, ob es einen eingebauten Weg dafür gibt? Ich habe nichts über Legendenbildung in der spectral API gefunden.Spectral (SPy) Label-Legende

Hier ist ein Beispiel

img = np.array([111, 112, 113, 121, 122, 123, 131, 132, 133, 
       211, 212, 213, 221, 222, 223, 231, 232, 233, 
       311, 312, 313, 321, 322, 323, 331, 332, 333]).reshape((3,3,3)) 
labels = np.array([0, 1, 1, 2, 2, 2, 3, 3, 3]).reshape((3,3)) 

I img mit labels dieser wie folgt ziehen:

from spectral import imshow as spyShow 
imageView = spyShow(data=img, bands=(0,1,2), classes=labels, fignum=1, interpolation='none') 
imageView.set_display_mode('overlay') 

enter image description here

Nun würde Ich mag eine Legende unter dem Bild platzieren.

labelDictionary={0:'Unknown', 1:'Gravel', 2:'Aslphalt', 3:'Glass'} 

aus dem Quellcode sehe ich, dass die Etikettenfarben aus gesetzt werden:

spectral.spy_colors 

Ferner sind sie mit dem folgenden Code erstellt:

import matplotlib.pyplot as plt 
from matplotlib.colors import ListedColormap, NoNorm 
cm = ListedColormap(np.array(spectral.spy_colors)/255.) 
plt.imshow(a, cmap=cm, vmin = 0, interpolation='none', norm=NoNorm()) 

Ich glaube, ich diejenigen extrahieren könnte Farben und ordnen Sie sie den Beschriftungen und Beschriftungen mit einer benutzerdefinierten Funktion zu. Ist dies der richtige Weg, um die Legende zu machen, oder gibt es eine fertige Art und Weise, zum Zweck der nicht das Rad neu zu erfinden ...

Antwort

0

ich die Legende wie folgt hinzugefügt:

from matplotlib import patches 
from spectral import spy_colors 
labelPatches = [ patches.Patch(color=spy_colors[x]/255., 
       label=labelDictionary[x]) for x in np.unique(labels) ] 

Sobald Sie hat das Label-Patches die Legende ist einfach hinzuzufügen:

plt.legend(handles=labelPatches, ncol=2, fontsize='medium', 
      loc='upper center', bbox_to_anchor=(0.5, -0.05)); 

enter image description here