簡體   English   中英

光譜(SPy)標簽圖例

[英]Spectral (SPy) label legend

我想在圖譜模塊繪制的圖像下方放置一個圖例。 我想知道是否有內置的方法來做到這一點? 我還沒有發現有關在光譜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))

我可以使用如下labels繪制img

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())

我想我可以提取這些顏色,並使用自定義函數將它們映射到標簽和標簽名稱。 這是制作圖例的正確方法,還是為了不重新發明輪子而准備好的方法?

我添加了這樣的圖例:

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));

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM