gnuplot画图中文标注相关问题

Posted learn to fail or fail to learn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gnuplot画图中文标注相关问题相关的知识,希望对你有一定的参考价值。

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

Windows下CMD中文乱码问题解决方法

 

 

将以下代码保存为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目录加入到系统环境变量中)。

 

 参考资料:

http://www.phy.ntnu.edu.tw/demolab/html.php?html=doc/gnuplot-doc/html/pdfcairo

https://www.zhihu.com/question/39053655

http://vision.ouc.edu.cn/~zhenghaiyong/courses/tutorials/gnuplot/gnuplot-zh.pdf

 

以上是关于gnuplot画图中文标注相关问题的主要内容,如果未能解决你的问题,请参考以下文章

GNUPLOT画图工具

Octave 作图 无响应

matlab画图时怎么给多个点(有坐标)标注数字序号啊?

Gnuplot

CAD画图如何标注尺寸?

matplotlib 画图的相关设置:坐标轴刻度字体、大小等