Опустить значения из plt.legend () из словарей - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть около 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

Есть мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...