首页 > 解决方案 > 从字典中省略 plt.legend() 中的值

问题描述

我有大约 45 张图像(带有数字标签的标记图像),我希望能够在一段代码中进行绘制和保存。我知道我总共有 26 个课程,并且我有一本包含所有课程的字典。现在,并非所有图像都有相同的标签,它们将有大约 50% 的标签。但我希望它们的颜色是统一的。所以在 img1 中,tag1 将是蓝色的,img2 没有任何 tag1,而 image3 的标签一仍然是蓝色的。但是,我不希望 1:blue 出现在 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:"water",这是原始 arrayLucc 中不存在的值。我尝试了 np.unique 的解决方法,但总是得到错误:

'LinearSegmentedColormap' object is not subscriptable

有什么想法吗?

标签: python-3.xnumpymatplotlib

解决方案


推荐阅读