一,colormap
常见色度枚举值如下
应用如下
img = cv2.applyColorMap(img, cv2.COLORMAP_JET)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
常用的COLORMAP_JET效果如下,该模式常用于生成热力图
二,colorbar
colorbar所有色带如下
应用如下
cmap = 'nipy_spectral'
plt.imshow(mask,cmap=plt.get_cmap(cmap))
plt.colorbar()
plt.show()
拓展:基于gridspec.GridSpec生成多子图
在做一个项目的时候,需要gridspec.GridSpec生成多子图,其中还涉及到热力图,colorbar单独生成,这里做一个分享,鉴于项目隐私,隐去了一些信息,自己在写的时候可以根据注释调整代码
fig = plt.figure()gs = gridspec.GridSpec(2, 3, width_ratios=[1, 1, 0.05], height_ratios=[1, 1], figure = fig, wspace = 0.03, hspace = 0.03, left = 0.5, right = 1, bottom = 0.35, top = 1) # 创建三子图,第三个子图用于存放色带, 设置两行是为了调整色带高度,不然色带高度和前面不一致, 从wspace到top都是调整子图位置ax1 = fig.add_subplot(gs[0])ax2 = fig.add_subplot(gs[1])cax = fig.add_subplot(gs[2]) # colorbar 绘图区font = {'family':'STIXGeneral', 'weight':'bold', 'size':8} # 字体字号设置den = resize(Y, X) # resize将两张不同的多维数组改成同一sizeax1.set_yticks([0, 100, 200, 300, 400, 500, 600])ax1.tick_params(labelsize=4, labelrotation=45, pad = 0, length = 1.5) # 同时设置x和y轴刻度字体大小并改变字体方向, pad调整坐标与坐标轴之间距离,length控制坐标长度# ax1.set_ylabel('highth', font) # 设置坐标标题ax1.set_xticks([0, 100, 200, 300, 400, 500, 600]) # 将x轴放在顶部ax1.xaxis.set_label_position('top') ax1.xaxis.tick_top()# ax1.set_xlabel('width', font)ax1.set_title('str', font, pad=3, y = -0.1) # pad 控制 title到图之间的距离, y默认为1,标题在顶部,设置y数值控制标题位置ax1.get_title()ax1.imshow(X)ax2.axes.get_yaxis().set_visible(False) # 不需要显示子图y轴的方式# ax2.set_yticks([0, 100, 200, 300, 400, 500, 600])ax2c = ax2.matshow(Y) # 映射第三子图色条用ax2.tick_params(labelsize=4, labelrotation=45, pad = 0, length = 1.5) # 同时设置x和y轴刻度字体大小并改变字体方向, pad调整坐标与坐标轴之间距离,length控制坐标长度# ax2.set_ylabel('highth', font)ax2.set_xticks([0, 100, 200, 300, 400, 500, 600])ax2.xaxis.set_label_position('top')ax2.xaxis.tick_top()# ax2.set_xlabel('width', font)ax2.set_title('str', font, pad = 3, y = -0.1)ax2.text(1, 80, 'str', fontsize=4, weight="bold", color = 'w')ax2.imshow(Y, cmap = 'nipy_spectral')plt.colorbar(ax2c, pad = 0.06, fraction=0.035, cax=cax) # 在第三子图添加colorbarcax.tick_params(labelsize=4, labelrotation=45, pad = 0, length = 1.5)cax.set_ylabel('str', font, labelpad=0) # labelpad到坐标轴的距离cax.yaxis.set_label_position('right')filename = img_path.split('/')[-1]filename = filename.replace('.jpg', 'xxx.png')print('Save at', filename)plt.savefig('./path to save/{}'.format(filename), bbox_inches='tight', pad_inches=0.05, dpi=300) # pad_inches为保存图像周边距离
最终子图显示如下,部分关键信息隐去,请谅解