✍️ 田冬冬 , 周茂 , 王亮 • 📅 2024-09-10

# GMT 中文效果演示

## 中文文字

本例中展示了如何在绘图时使用中文标签和中文标题，以及如何打印横排和竖排的中文。

- 左图中 Y 轴标签与纵轴平行

- 中图中 Y 轴标签与 X 轴平行

- 右图中 Y 轴标签单独绘制并使用了竖排中文字体。

    gmt begin chinese-texts png,pdf C-I${HOME}/.gmt/

    # 左图
    gmt set FONT_TITLE 24p,STHeiti-Regular--UniGB-UTF8-H,black FONT_LABEL 16p,STSong-Light--UniGB-UTF8-H,black
    gmt basemap -R0/10/0/5 -JX6c/4c -Bxaf+l"横轴" -Byaf+l"纵轴" -BWSen+t"中文标题"
    gmt text -F+f << EOF
    3 2.5 20p,STSong-Light--UniGB-UTF8-H,black 横排文字
    8 4.0 20p,STSong-Light--UniGB-UTF8-V,red   竖排文字
    EOF

    # 中图
    gmt set FONT_TITLE 24p,STHeiti-Regular--UniGB-UTF8-H,black FONT_LABEL 16p,STSong-Light--UniGB-UTF8-H,black
    gmt basemap -R0/10/0/5 -JX6c/4c -Bxaf+l"横轴" -Byaf+L"纵轴" -BWSen+t"中文标题" -X9c
    gmt text -F+f << EOF
    3 2.5 20p,STSong-Light--UniGB-UTF8-H,black 横排文字
    8 4.0 20p,STSong-Light--UniGB-UTF8-V,red   竖排文字
    EOF

    # 右图
    gmt set FONT_TITLE 24p,STHeiti-Regular--UniGB-UTF8-H,black FONT_LABEL 16p,STSong-Light--UniGB-UTF8-H,black
    gmt basemap -R0/10/0/5 -JX6c/4c -Bxaf+l"横轴" -BWSen+t"中文标题" -X9c
    gmt basemap -Byaf+L"纵轴" -BW --FONT_LABEL=16p,STSong-Light--UniGB-UTF8-V,black --MAP_LABEL_OFFSET=20p
    gmt text -F+f << EOF
    3 2.5 20p,STSong-Light--UniGB-UTF8-H,black 横排文字
    8 4.0 20p,STSong-Light--UniGB-UTF8-V,red   竖排文字
    EOF

    gmt end show

## 中文月份

GMT 可以绘制中文的月份。

Linux 和 macOS 用户需要先修改 GMT 中文语言文件的字符编码（Windows 用户不需要）:

    # 进入 GMT 语言定义文件所在目录
    cd `gmt --show-sharedir`/localization

    # 备份中文语言文件
    cp gmt_cn1.locale gmt_cn1.locale_old

    # 将中文编码方式从默认的 GB2312 修改为 UTF8 编码，这样才能正常显示中文月份，星期，指南针等
    iconv -f GBK -t UTF8 gmt_cn1.locale_old > gmt_cn1.locale

设置 GMT_LANGUAGE 为中文（即 `cn1`），并设置标注字体为中文。

    gmt begin chinese-months png,pdf C-I${HOME}/.gmt/

        # 设置 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 basemap -R1997T/1998T/0/10 -JX25c/4c -Bpxa1O -Byaf -BWSen

        # FORMAT_TIME_PRIMARY_MAP 为 abbreviated 表示显示“一”
        gmt set FORMAT_DATE_MAP o FORMAT_TIME_PRIMARY_MAP abbreviated
        gmt basemap -R1997T/1998T/0/10 -JX25c/4c -Bpxa1O -Byaf -BWSen -Y-6c

    gmt end show

## 中文星期

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

    gmt begin chinese-weeks png,pdf C-I${HOME}/.gmt/

        # 设置 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 basemap -R1969-7-21T/1969-7-28T/0/4 -JX15c/3c -Bpxa1K -Byaf -BWSen

        # FORMAT_TIME_PRIMARY_MAP 为 abbreviated 表示显示“周一”
        gmt set FORMAT_DATE_MAP u FORMAT_TIME_PRIMARY_MAP abbreviated
        gmt basemap -R1969-7-21T/1969-7-28T/0/4 -JX15c/3c -Bpxa1K -Byaf -BWSen -Y-5c

    gmt end show

## 中文玫瑰图

GMT 绘制的玫瑰图同样支持中文。

    gmt begin chinese-compass png,pdf C-I${HOME}/.gmt/

        # 设置 GMT 语言为中文
        gmt set GMT_LANGUAGE cn1
        # 设置标注的字体为中文字体
        gmt set FONT_TITLE 12p,39
        # 方向玫瑰图
        gmt basemap -R-7/7/-5/5 -Tdg0/0+w0.6i+f3+l+jCM
        # 磁场玫瑰图
        gmt basemap -R-7/7/-5/5 -Tmg0/0+w1i+d-14.5+t45/10/5+i0.25p,blue+p0.25p,red+l+jCM -X1.5i

    gmt end show