У меня есть около 45 изображений (помеченных изображениями с тегами цифрами c), которые я хочу иметь возможность чертить и сохранять в виде одного куска кода. Я знаю, что в целом у меня 26 классов, и у меня есть словарь со всеми ними. Теперь не все изображения имеют одинаковые теги, они будут иметь около 50% тегов. Но я хочу, чтобы цвета были одинаковыми на всех. Таким образом, в img1 tag1 будет синим, img2 не имеет никакого tag1, а тег image3 все равно будет синим. Однако я не хочу, чтобы 1: синий отображался в легенде image2.
Вот воспроизводимый пример, измененный из другой вопрос :
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np
##arrayLucc is the array of land use types
arrayLucc = np.random.randint(1,4,(5,5))
## first you need to define your color map and value name as a dic
t = 1 ## alpha value
cmap = {1:[0.1,0.1,1.0,t],2:[1.0,0.1,0.1,t],3:[1.0,0.5,0.1,t], 4:[0.1, 0.2, 0.3, t]}
labels = {1:'agricultural land',2:'forest land',3:'grassland', 4:"Water"}
arrayShow = np.array([[cmap[i] for i in j] for j in arrayLucc])
## create patches as legend
patches =[mpatches.Patch(color=cmap[i],label=labels[i]) for i in cmap]
plt.imshow(arrayShow)
plt.legend(handles=patches, loc=4, borderaxespad=0.)
plt.show()
Мой вопрос: я хочу иметь возможность удалить дополнительный тег 4: «вода» из легенда, значение, которого нет в исходном массиве Lu cc. Я пробовал обходные пути с np.unique, но всегда получаю ошибку:
'LinearSegmentedColormap' object is not subscriptable
Есть мысли?