gnuplot是一个基于命令行的开源跨平台画图工具包,画图功能非常丰富。不过最近在考虑如何在gnuplot图中添加中文标注的过程中遇到了一些问题,记录如下。
gnuplot支持多种的输出格式,比如png、svg、eps、pdf。因为论文需要,一般我们要求得到的矢量图的格式,采用eps或者pdf作为输出样式的情况居多。
当直接绘制输出eps格式时,输出的eps文件会自动裁边,将多余的空白去掉(相当于自带gsview里面的automatically calculating bounding box操作)
set terminal postscript eps enhanced color font 'Helvetica,12'
但是由于历史原因,eps格式输出对中文的支持很差。而如果输出pdf、svg、png等格式可以比较容易地实现支持中文。比如输出到pdf,可以用pdfcairo作为输出选项。
set term pdfcairo font "simsun,12"
这种书写格式,其中的字体默认搜索的路径是windows下自带的字体,'simsum'是宋体。其中填入的名字是和注册表中以下位置的字体名称对应的。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Fonts
上图中红框中的字体对应华文行楷,那么参数中应该填'STXingkai'。
另外通过fc-list也可以查看系统中已经安装的中文字体
如果windows下输出的结果是乱码,需要先调整命令行的编码,UTF-8的代码页为65001
chcp 65001
将以下代码保存为test.plt并运行
set encoding utf8
set xlabel "横坐标"
set ylabel "纵坐标"
set term pdfcairo lw 2 font "simsun,8"
set output "test.pdf"
plot sin(x)
set title "正弦函数"
set output
可以看到中文可以正常显示。最后一行的'set output'还是尽量保留,因为有些IDE不加这一句会认为画图还没结束,画图的结果就不会写入文件中,就会一直卡住。
注:如果直接在gnuplot的IDE中输入以上代码,可能还是会乱码,估计是gnuplot的IDE不支持中文编码直接录入。
如果原来用eps输出的程序通过size指令对图形进行了放缩,改变输出方式后,排版方式变化了,图形的效果可能会发生较大变化,这个可以通过指定pdf输出的size来解决,输出的size按照原来的比例适当放大,比如原来放缩的比例是
set size 0.7,0.4
输出pdf的时候可以:
set term pdfcairo font size 7,4 "simsun,12"
如果程序输出的图有白边,考虑是不是和我一样是双屏配置导致的,我的单屏幕测试正常。
还有一种折衷的方式是输出还是原来的eps,用inkscape打开,修改对应的英文标注为中文,再保存为eps格式,比较费劲,不太建议这样操作。
gnuplot默认的图形化编辑器非常难用,建议使用Sublimtext3,再安装gnuplot插件,可以语法高亮,定位错误行,并快速编译(需要将安装好的gnuplot目录加入到系统环境变量中)。