GMT 全称是 Generiac Mapping Tools,是非常好用的地理科学制图软件之一。之前都是用 MATLAB 制图,但地理制图感觉不太规范,投影的支持也少;后来使用 QGIS 进行制图,但是和代码结合起来比较困难。而 julia 语言可以比较方便的调用外部语言和程序,运算速度也很快,所以就进行了学习,准备以后将数据的可视化工作都用 julia 来实现。
GMT源程序的中文的官方翻译:简介 — GMT 中文手册 (gmt-china.org)
GMT.jl 的参考手册:Index · GMT (generic-mapping-tools.org)
我们可以使用 makecpt
绘制线性的颜色图,也可以用 grd2cpt
绘制 equal count 的颜色图。但有时候我们拿到的是向量数据,不是栅格数据 (grid
),这时候想要得到 equal count 的颜色图就需要转换成矩阵才行。
equal count 是按照频度分布,使得不同颜色范围内的数据量相同,是 QGIS 中常用的一种设置颜色图的方法。
问题在于,直接将向量转化成一维栅格是无效的,得到的颜色图还是一个均匀线性
xxxxxxxxxx
121# 错误代码
2using GMT
3# 输入变量,在 [0, 0.2] 之间密集分布
4X = [0, 0.1 , 0.12 , 0.13, 0.5, 0.9]
5# 转换成一维栅格
6Y = GMT.mat2grid(X)
7# 得到颜色图
8Cpt = GMT.grd2cpt(Y)
9GMT.colorbar(
10 C = Cpt,
11 show = true
12)
解决这个问题也很简单,转化成二维栅格就可以。
xxxxxxxxxx
71# 使用 reshape 函数转化成 2维矩阵
2Y2 = GMT.mat2grid(reshape(X,2,:))
3Cpt = GMT.grd2cpt(Y2)
4GMT.colorbar(
5 C = Cpt,
6 show = true
7)
在 GMT 中,默认的小数点是12位的,对于制图来说未免也太多了,我们需要修改 gmt.conf
来实现。可以用 GMT 的命令做到。
xxxxxxxxxx
21# 设置 colorbar 上坐标的小数点位数
2GMT.gmt("set FORMAT_FLOAT_MAP %.2f")
我试过用 gmtset
,但总是会报错。