14.15 中文图

注解

GMT本身不支持中文,若需要在GMT上显示中文,需要进行额外的配置。具体方法见 安装 一章。本文假定用户已经做好了GMT中文支持的配置工作。

注解

GMT中文语言文件是GMT安装目录下的文件 share/localization/gmt_cn1.locale。该中文语言文件默认为GB2312编码方式。对于Linux和macOS用户,需要人工将其修改为 UTF8编码才能正常显示中文的月份和星期。Windows用户则不需要对其进行处理。

修改文件编码方式的方式有很多,请自行查找。我使用的是 enca的如下命令修改编码:

enca -L zh_CN -x UTF-8 gmt_cn1.locale

14.15.1 中文文字

本例中展示了如何在绘图时使用中文标签和中文标题,以及如何打印横排和竖排的中文。左图中Y轴标签与纵轴平行,中图中Y轴标签与X轴平行,右图中Y轴标签单独绘制并使用了竖排中文字体。右图中也可以使用 pstext 模块手动添加Y轴标签。

PS=chinese-texts.ps

gmt set PS_MEDIA 30cx10c

# 左图
gmt set FONT_TITLE 20p,41,black FONT_LABEL 16p,39,black
gmt psbasemap -R0/10/0/5 -JX6c/4c -Bxaf+l'横轴' -Byaf+l'纵轴' -BWSen+t'中文标题' -K -P > $PS
gmt pstext -J -R -F+f -K -O >> $PS << EOF
3 2.5 20p,39,black 横排文字
8 4.0 20p,43,red   竖排文字
EOF

# 中图
gmt set FONT_TITLE 20p,41,black FONT_LABEL 16p,39,black
gmt psbasemap -R0/10/0/5 -JX6c/4c -Bxaf+l'横轴' -Byaf+L'纵轴' -BWSen+t'中文标题' -K -O -X9c >> $PS
gmt pstext -J -R -F+f -K -O >> $PS << EOF
3 2.5 20p,39,black 横排文字
8 4.0 20p,43,red   竖排文字
EOF

# 右图
gmt set FONT_TITLE 20p,41,black FONT_LABEL 16p,39,black
gmt psbasemap -R0/10/0/5 -JX6c/4c -Bxaf+l'横轴' -BWSen+t'中文标题' -K -O -X9c >> $PS
gmt psbasemap -R -J -Byaf+L'纵轴' --FONT_LABEL=16p,43,black --MAP_LABEL_OFFSET=20p -BW -K -O >> $PS
gmt pstext -J -R -F+f -O >> $PS << EOF
3 2.5 20p,39,black 横排文字
8 4.0 20p,43,red   竖排文字
EOF
gmt psconvert -A -P -Tg $PS
rm gmt.*
../../_images/chinese-texts.png

14.15.2 中文月份

GMT支持中文的月份。要想使用中文表示月份,需要设置 GMT_LANGUAGE 为中文,即 cn1,并设置标注的字体为中文。

PS=chinese-months.ps
# 设置GMT语言为中文
gmt set GMT_LANGUAGE cn1
# 设置标注的字体为中文字体
gmt set FONT_ANNOT_PRIMARY 16p,39,black

# FORMAT_TIME_PRIMARY_MAP 为 full 表示显示“一月”
gmt set FORMAT_DATE_MAP o FORMAT_TIME_PRIMARY_MAP full
gmt psbasemap -R1997T/1998T/0/10 -JX25c/4c -Bpxa1O -Byaf -BWSen -K -Y8c > $PS

# FORMAT_TIME_PRIMARY_MAP 为 abbreviated 表示显示“一”
gmt set FORMAT_DATE_MAP o FORMAT_TIME_PRIMARY_MAP abbreviated
gmt psbasemap -R1997T/1998T/0/10 -JX25c/4c -Bpxa1O -Byaf -BWSen -Y-6c -O >> $PS
gmt psconvert -A -P -Tg $PS
rm gmt.*
../../_images/chinese-months.png

14.15.3 中文星期

GMT支持中文的星期。要想使用中文表示星期几,需要设置 GMT_LANGUAGE 为中文,即 cn1,并设置标注的字体为中文。

PS=chinese-weeks.ps
# 设置GMT语言为中文
gmt set GMT_LANGUAGE cn1
# 设置标注的字体为中文字体
gmt set FONT_ANNOT_PRIMARY 12p,39

# FORMAT_TIME_PRIMARY_MAP 为 full 表示显示“星期一”
gmt set FORMAT_DATE_MAP u FORMAT_TIME_PRIMARY_MAP full
gmt psbasemap -R1969-7-21T/1969-7-28T/0/4 -JX15c/3c -Bpxa1K -Byaf -BWSen -K -P -Y7c > $PS

# FORMAT_TIME_PRIMARY_MAP 为 abbreviated 表示显示“周一”
gmt set FORMAT_DATE_MAP u FORMAT_TIME_PRIMARY_MAP abbreviated
gmt psbasemap -R1969-7-21T/1969-7-28T/0/4 -JX15c/3c -Bpxa1K -Byaf -BWSen -Y-5c -O >> $PS
gmt psconvert -A -P -Tg $PS
rm gmt.*
../../_images/chinese-weeks.png