python-3.x - 从字典中省略 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
有什么想法吗?
解决方案
推荐阅读
- websphere-liberty - 在 Websphere Liberty 18.0.0.1 中运行 Moxy 2.7.1
- amazon-web-services - 将 cloudwatch 流日志实时移动到 Redshift
- apache-spark - Spark AccumulatorV2 与 HashMap
- r - R 条件计算和组内的行标志
- c# - 在数组中元素的递减序列中找到最高和
- php - 当 var_dump 变量 ...im 得到 NULL 时输出
- php - 如何根据数字范围获取(固定)值
- javascript - index.html 中的 JS 函数在 Angular 中只执行了一次
- eclipse - Eclipse:包含的功能未显示
- restsharp - 使用 RestSharp 进行 NTLM 身份验证