一,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将两张不同的多维数组改成同一size
ax1.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) # 在第三子图添加colorbar
cax.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为保存图像周边距离
最终子图显示如下,部分关键信息隐去,请谅解