我想在spectral模块绘制的图像下方放置一个图例。我想知道是否有内置的方法来做到这一点?我还没有找到关于在spectral API中制作传说的任何内容。
这是一个例子
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))
我可以像img
这样绘制labels
:
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')
现在我想在图像下方放置一个图例。
labelDictionary={0:'Unknown', 1:'Gravel', 2:'Aslphalt', 3:'Glass'}
从源代码中我看到标签颜色取自:
spectral.spy_colors
此外,他们使用以下代码绘制:
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())
我想我可以使用自定义函数提取这些颜色并将它们映射到标签和标签名称。这是制作传奇的正确方法,还是有现成的方法,为了不重新发明轮子......
答案 0 :(得分:0)
我添加了这样的传奇:
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) ]
获得标签后,图例很容易添加:
plt.legend(handles=labelPatches, ncol=2, fontsize='medium',
loc='upper center', bbox_to_anchor=(0.5, -0.05));