Python 在matplotlib中添加整数图例而不是渐变

Python 在matplotlib中添加整数图例而不是渐变,python,arrays,numpy,matplotlib,legend-properties,Python,Arrays,Numpy,Matplotlib,Legend Properties,我想添加一个只有整数的图例,即0,1,2,3…14,而不是渐变色条。基本上,我希望数组值在图例中具有唯一的颜色和标签,以便可以清楚地区分数组中的每个值 fileloc=os.path.join(basepath, infile) data=np.loadtxt(fileloc) fig = plt.figure(figsize=(20,10)) plt.imshow(data) plt.colorbar() 可以使用matplotlib.colors.ListedColormap,如下所示

我想添加一个只有整数的图例,即0,1,2,3…14,而不是渐变色条。基本上,我希望数组值在图例中具有唯一的颜色和标签,以便可以清楚地区分数组中的每个值

fileloc=os.path.join(basepath, infile)
data=np.loadtxt(fileloc)

fig = plt.figure(figsize=(20,10))
plt.imshow(data)
plt.colorbar()


可以使用matplotlib.colors.ListedColormap,如下所示:

custom_cmap = colors.ListedColormap(['purple','blue','green','yellow']) #... and so on until you have 15 colours specified
然后将其作为cmap参数传递给imshow和colorbar:

plt.imshow(data, cmap=custom_cmap)
plt.colorbar(cmap=custom_cmap)

如果我理解正确的话,数据是作为一个整数numpy数组给出的,它会生成一个正好有N种不同颜色的图像

要从viridis colormap中获得正好有N种颜色的colormap,请使用
plt.cm.get_cmap('viridis',N)
。这将产生一个正好有N个区域的颜色条

要在每个区域的中心精确地获得刻度,请将空间分成2N+1个部分,然后取所有奇数位置。(因此,如果有5种颜色,颜色栏将从0变为4,这将得到11个标记,其中标记0被跳过,标记1、3、5、7和9被使用)。在每个勾号旁边可以放置一个带有数字的标签

将numpy导入为np
将matplotlib.pyplot作为plt导入
图,ax=plt.子批次(图尺寸=(6,4))
#创建一些随机测试数据
数据=np。随机。正常(0,0.05,大小=(150150))。总和(轴=0)。总和(轴=1)
data=data.astype(np.int)#转换为整数
data-=data.min()#让数字从零开始
num_colors=data.max()+1
cmap=plt.cm.get_cmap('viridis',num_colors)
plt.imshow(数据,cmap=cmap)
cbar=plt.colorbar(ticks=np.linspace(0,num\u colors-1,num\u colors*2+1)[1::2])
cbar.ax.set\u标签(范围(数量颜色))
plt.show()

plt.colorbar
没有
cmap
参数。考虑文档。这能回答你的问题吗?