导语:

前两天,一个朋友找我帮忙,让我给她画一个25个刻度的“颜色条”。所谓颜色条,就是这样的。

python colorbar 范围 python中colorbar_数据

颜色深浅代表的意思就是一个物理量的变化,颜色深代表物理量大,颜色浅代表这个物理量小。我需要在上面标注一下刻度(25个)。然后根据这位朋友给我的数据,标上数据。开始我的感觉是:这么简单的事情不是暴露智商吗?随便用matlab或者python的工具箱都可以把数据标上去啊!

可以用colorbar工具箱啊。随后发现,其实不那么简单。无论是matlab还是python自带的colorbar都只能标注最多十个刻度。就像下面的效果:

python colorbar 范围 python中colorbar_像素点_02

于是,我觉得自己开发一个画颜色条的代码。

python colorbar 范围 python中colorbar_数据_03


代码及相关资源获取:

后台回复:colorbar,获取源代码。


开发工具:

python3.6.4

需要安装的包或者模块:

cv2

xlrd。


效果演示:

python colorbar 范围 python中colorbar_python colorbar 范围_04

效果就是这样,2个刻度都可以标注好。


基本原理:

主要原理就是,你在网上找一个颜色条。然后放在代码的当前文件夹里面。在颜色图上标注的方法就是:用python的for循环,每一个循环增加一个刻度的像素点。然后标注上excel里面的数据。顺便再颜色条上标注一个“-”表示刻度。

说白了就是用代码测量像素点位置,然后标注数据。


部分代码:

核心代码就是下面这一段:

for i in range(0,25): 
    cv2.putText(bk_img,str1[i], (x1,y1), cv2.FONT_HERSHEY_SIMPLEX,0.3,(0,0,0), 1, cv2.LINE_AA)
    cv2.putText(bk_img,"-", (x0,y1), cv2.FONT_HERSHEY_SIMPLEX,0.3,(0,0,0), 1, cv2.LINE_AA)
    y1+=21

21代表的就是每个循环y轴方向增加21个像素点的距离。21个像素点也就是你自己需要的标尺刻度。

所以关键在于这个函数:

cv2.putText(bk_img,str1[i], (x1,y1), cv2.FONT_HERSHEY_SIMPLEX,0.3,(0,0,0), 1, cv2.LINE_AA)

这个函数意思就是在图上标注符号。str1[i]代表的是你要在图上标注什么符号。(x1,y1)代表的就是你要在图片上哪个点标注。具体的用法大家可以用查询。用help(cv2.putText)