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 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画图中文标注相关问题的更多相关文章

  1. 利用OpenCV给图像添加中文标注

    利用OpenCV给图像添加中文标注 : 参考:http://blog.sina.com.cn/s/blog_6bbd2dd101012dbh.html  和https://blog.csdn.net/ ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——问题集:如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题(转载)

    Geodatabase中中文标注编码乱码一直是一个比较头疼的问题之前也不知道问题出在哪里?在百度后发现园子里的zssai已经对这个问题原因做了一个详细说明.这里将原文引用如下: 说明:此文转载自htt ...

  3. 如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题

    自10.2版本开始,我就一直被ArcGIS Runtime SDK for Android的中文标注无限困扰.无论是驻留于内存中的Graphic 的文本符号TextSymbol,还是新增的离线geod ...

  4. ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题

    1.前言 问题:在部分Android机型中使用ArcGIS for Android 10.1.1 API 中文标注导致程序异常崩溃. 说明:手里有两台机器一台是Nexus4,原生系统,版本4.4.4, ...

  5. ubuntu下matplotlib画图中文乱码问题

    最近因为论文原因在学习机器学习,看的一本叫做<机器学习实战>的书,看了看还是不错的,因为其中既有原理又有实例.今天载使用matplotlib进行画图时,发现中文会显示为小方块,这个问题真是 ...

  6. GNUPLOT画图工具

    http://blog.csdn.net/codingkid/article/details/7211492 不得不说这个工具实在是太强大了. 1.首先命令简单,不会有那么多的语法问题. 2.其次画图 ...

  7. solr 中文分词相关(转载)

    smartcn和ik的对比,来自http://www.cnblogs.com/hadoopdev/p/3465556.html 一.引言: 年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜 ...

  8. spring MVC中文乱码相关总结

    总结几种方式,都使用的话能解决大多数乱码的情况 1.所有页面使用 <%@page language="java" pageEncoding="UTF-8" ...

  9. Python 3下Matplotlib画图中文显示乱码的解决方法

    解决办法: 因为乱码是Matplotlib缺少中文配置所导致的,所以我们只需要在程序中说明使用中文字体即可. 先选一个字体.在计算机中找到字体,选择一种中文字体,比如我这里用的是楷体 右键可以查看其属 ...

随机推荐

  1. 初学Python(第二课)

    一.列表.元组的操作 1.定义:列表类似于C中的数组,使用方法也相似.它的定义举例如下:letter = ['A','B','C','D','E','F']; 2.列表的切片 (1)访问一个元素且知道 ...

  2. Mysql给某一台主机授权访问,修改root密码

    ubuntu上用的是phpstudy,安装好之后,敲mysql,提示没有,需要安装mysql的客户端. 安装好之后直接敲mysql,敲 mysql 再敲use mysql 再敲mysql -uroot ...

  3. hdu1061(2015-N1):1.快速幂;2.找规律

    1.快速幂 原理:求a的b次方,将b转化为二进制数,该二进制位第i位的权是2^(i-1), 例如 11的二进制是1011 11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1 因此,我们将a¹ ...

  4. 转载 USB固件分析

    http://1438431234.spaces.eepw.com.cn/articles/article/item/114022 0x00000000 0x0001fff0 大小 0x1fff1 = ...

  5. PendingIntent

    PendingIntent表示一种即将发生的意图,和Intent的区别在于:PendingIntent是在将来的某个不确定的时刻发生,而Intent是立刻发生 典型使用场景是给RemoteViews添 ...

  6. hdu1251 map水过

    更快的方法应该是字典树,不用处理前缀. AC代码: #include<iostream> #include<cstring> #include<string> #i ...

  7. 二、Mysql(二)

    原文参考:http://www.cnblogs.com/wupeiqi/articles/5713323.html 还有一个是课件,看着也像博客,但不知道是谁的 内置函数 触发器 存储过程 索引 与p ...

  8. AHB/APB简介

    AHB AHB总线互联结构图 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的 ...

  9. Android Gradle项目Hotfix热修复技术的接入

    https://github.com/AItsuki/HotFix Issues MAC系统无法自动打包补丁,原因可能是路径分隔符问题 使用谷歌multidex分包后无法注入代码(开启multidex ...

  10. STM32 下的库函数和寄存器操作比较

    以 led闪烁中的flashLed函数例子: 库函数操作简单,但是效率不如寄存器操作的高: 寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高 /**下面是通过直接操作库函数的方式实现IO控制 ...