zoukankan      html  css  js  c++  java
  • 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_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionFonts
    

    上图中红框中的字体对应华文行楷,那么参数中应该填'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

  • 相关阅读:
    leetcode 155. Min Stack 、232. Implement Queue using Stacks 、225. Implement Stack using Queues
    leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String
    leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
    leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
    leetcode 162. Find Peak Element
    leetcode 88. Merge Sorted Array
    leetcode 74. Search a 2D Matrix 、240. Search a 2D Matrix II
    Android的API版本和名称对应关系
    spring 定时任务执行两次解决办法
    解析字符串为泛型的方法
  • 原文地址:https://www.cnblogs.com/followyourheart/p/gnuplot.html
Copyright © 2011-2022 走看看