当前位置: 首页 > news >正文

Gnuplot 使用技巧

原文链接

对于在Linux下工作的人,如果你经常要画一些二维图和简单的三维图的话,那么,gnuplot无疑是一个非常好的选择,不仅图形漂亮,而且操作简单。当然如果需要质量更高的三维图,请用其他的一些专业绘图软件。建议大家学会使用gnuplot。这个小软件通常都是Redhat Linux自带的,但自带的版本是3.7的,建议将其升级到4.0,新版本具有很多新功能。最新版本可以到http://www.gnuplot.info下载。 

一些最基本的操作请大家看说明书。这里总结一下我在使用过程中遇到的一些问题以及解决的办法,目的是让那些以前不会的或不熟练的能快速入门,会画自己想要的图,因为原来的说明书很长,较难有针对性地很快找到自己想要的信息。这里简单的总结不可能面面俱到,所以大家不要抱怨我写的不全,更全面的了解还是请看说明书,网上的资料也多的是。其实这也是我们从网上一点一点搜集和摸索出来的。我相信看完后,应该平时最常见的问题基本上都能在这里找到答案。如果大家在使用过程中摸索到了我没有写到的技巧和体会,或有其它建议,请大家提告诉我,以不断完善这篇总结,谢谢! 



一、 基础篇: 

在linux命令提示符下运行gnuplot命令启动,输入quit或q或exit退出。 



1、plot命令 

gnuplot> plot sin(x) with line linetype 3 linewidth 2 或 

gnuplot> plot sin(x) w l lt 3 lw 2 %用线画,线的类型(包括颜色与虚线的类型)是3,线的宽度是2,对函数sin(x)作图 

gnuplot> plot sin(x) with point pointtype 3 pointsize 2 或 

gnuplot> plot sin(x) w p pt 3 ps 2 %用点画,点的类型(包括颜色与点的类型)是3,点的大小是2 

gnuplot> plot sin(x) title 'f(x)' w lp lt 3 lw 2 pt 3 ps 2 %同时用点和线画,这里title ‘f(x)’表示图例上标'f(x)',如果不用则用默认选项 

gnuplot> plot sin(x) %此时所有选项均用默认值。如果缺某一项则将用默认值 

gnuplot> plot ‘a.dat’ u 2:3 w l lt 3 lw 2 %利用数据文件a.dat中的第二和第三列作图 



顺便提一下,如这里最前面的两个例子所示,在gnuplot中,如果某两个词,按字母先后顺序,前面某几个字母相同,后面的不同,那么只要写到第一个不同的字母就可以了。如with,由于没有其它以w开头的词,因此可以用 w 代替,line也可以用 l 代替。 



2、同时画多条曲线 

gnuplot> plot sin(x) title ‘sin(x)’ w l lt 1 lw 2, cos(x) title ‘cos(x)’ w l lt 2 lw 2 %两条曲线是用逗号隔开的。画多条曲线时,各曲线间均用逗号隔开就可以了。 



以上例子中是对函数作图,如果对数据文件作图,将函数名称换为数据文件名即可,但要用单引号引起来。 



3、关于图例的位置 

默认位置在右上方。 

gnuplot> set key left %放在左边,有left 和right两个选项 

gnuplot> set key bottom %放在下边,只有这一个选项;默认在上边 

gnuplot> set key outside %放在外边,但只能在右面的外边 

以上三个选项可以进行组合。如: 

gnuplot> set key left bottom %表示左下边 



还可以直接用坐标精确表示图例的位置,如 

gnuplot> set key 0.5,0.6 %将图例放在0.5,0.6的位置处 



4、关于坐标轴 

gnuplot> set xlabel ‘x’ %x轴标为‘x’ 

gnuplot> set ylabel ‘y’ %y轴标为’y’ 

gnuplot> set ylabel ‘DOS’ tc lt 3 %其中的tc lt 3表示’DOS’的颜色用第三种颜色。 

gnuplot> set xtics 1.0 %x轴的主刻度的宽度为1.0,同样可以为y轴定义ytics 

gnuplot> set mxtics 3 %x轴上每个主刻度中画3个分刻度,同样可以为y轴定义mytics 

gnuplot> set border 3 lt 3 lw 2 %设为第三种边界,颜色类型为3,线宽为2 

同样可以为上边的x轴(称为x2)和右边y(称为y2)轴进行设置,即x2tics,mx2tics,y2tics,my2tics。 

gnuplot> set xtics nomirror 

gnuplot> unset x2tics %以上两条命令去掉上边x2轴的刻度 



gnuplot> set ytics nomirror 

gnuplot> unset y2tics %以上两条命令去掉右边y轴的刻度 



5、在图中插入文字 

gnuplot> set label ‘sin(x)’ at 0.5,0.5 %在坐标(0.5,0.5)处加入字符串’sin(x)’。 

在输出为.ps或.eps文件时,如果在set term 的语句中加入了enhanced选现,则可以插入上下标、希腊字母和特殊符号。上下标的插入和latex中的方法是一样的。 



6、在图中添加直线和箭头 

gnuplot> set arrow from 0.0,0.0 to 0.6,0.8 %从(0.0,0.0)到(0.6,0.8)画一个箭头 

gnuplot> set arrow from 0.0,0.0 to 0.6,0.8 lt 3 lw 2 %这个箭头颜色类型为3,线宽类型为2 

gnuplot> set arrow from 0.0,0.0 to 0.6,0.8 nohead lt 3 lw 2 %利用nohead可以去掉箭头的头部,这就是添加直线的方法。 



注意,在gnuplot中,对于插入多个的label和arrow等等,系统会默认按先后顺序分别对各个label或arrow进行编号,从1开始。如果以后要去掉某个label或arrow,那么只要用unset命令将相应的去掉即可。如: 

gnuplot> unset arrow 2 

将去掉第二个箭头。 



7、图的大小和位置 

gnuplot>set size 0.5,0.5 %长宽均为默认宽度的一半,建议用这个取值,尤其是画成ps或eps图形的时候 

gnuplot>set origin 0.0,0.5 %设定图的最左下角的那一点在图形面板中的位置。这里图将出现在左上角。 



8、画三维图 

gnuplot>splot ‘文件名’ u 2:4:5 %以第二和第四列作为x和y坐标,第五列为z坐标。 





二、提高篇: 

1、如何在同一张图里同时画多个图 

gnuplot>set multiplot %设置为多图模式 

gnuplot>set origin 0.0,0.0 %设置第一个图的原点的位置 

gnuplot>set size 0.5,0.5 %设置第一个图的大小 

gnuplot>plot “a1.dat” 

gnuplot>set origin 0.0,0.5 %设置第二个图的原点的位置 

gnuplot>set size 0.5,0.5 %设置第二个图的大小 

gnuplot>plot “a2.dat” 

gnuplot>set origin 0.0,0.0 %设置第三个图的原点的位置 

gnuplot>set size 0.5,0.5 %设置第三个图的大小 

gnuplot>plot “a3.dat” 

gnuplot>set origin 0.0,0.0 %设置第四个图的原点的位置 

gnuplot>set size 0.5,0.5 %设置第四个图的大小 

gnuplot>plot “a4.dat” 

当然,如果后一个图中的某个量的设置和前一个的相同,那么后一个中的这个量的设置可以省略。例如上面对第二、第三和第四个图的大小的设置。前一个图中对某个量的设置也会在后一个图中起作用。如果要取消在后面图中的作用,必须用如下命令,如取消label,用 

gnuplot>unset label 





2、作二维图时,如何使两边坐标轴的单位长度等长 

gnuplot> set size square %使图形是方的 
gnuplot> set size 0.5,0.5 %使图形是你要的大小 
gnuplot> set xrange[-a:a] 
gnuplot> set yrange[-a:a] %两坐标轴刻度范围一样 
gnuplot> plot ‘a.dat’ 



3、如何在同一张图里利用左右两边的y轴分别画图 

gnuplot> set xtics nomirror %去掉上面坐标轴x2的刻度 
gnuplot> set ytics nomirror %去掉右边坐标轴y2的刻度 
gnuplot> set x2tics %让上面坐标轴x2刻度自动产生 
gnuplot> set y2tics %让右边坐标轴y2的刻度自动产生 
gnuplot> plot sin(x),cos(x) axes x1y2 %cos(x)用x1y2坐标,axes x1y2表示用x1y2坐标轴 
gnuplot> plot sin(x),cos(x) axes x2y2 %cos(x)用x2y2坐标,axes x2y2表示用x2y2坐标轴 
gnuplot> set x2range[-20:20] %设定x2坐标的范围 
gnuplot> replot 
gnuplot> set xrange[-5:5] %设定x坐标的范围 
gnuplot> replot 
gnuplot> set xlabel 'x' 
gnuplot> set x2label 't' 
gnuplot> set ylabel 'y' 
gnuplot> set y2label 's' 
gnuplot> replot 
gnuplot> set title 'The figure' 
gnuplot> replot 
gnuplot> set x2label 't' textcolor lt 3 %textcolor lt 3或tc lt 3设置坐标轴名称的颜色 



4、如何插入希腊字母和特殊符号 

一般只能在ps和eps图中,且必须指定enhanced选项。在X11终端(即显示器)中无法显示。 

gnuplot> set terminal postscript enhanced 

然后希腊字母就可以通过{/Symbol a}输入。例如 

gnuplot> set label ‘{/Symbol a}’ 

各种希腊字母与特殊符号的输入方法请见安装包中gnuplot-4.0.0/docs/psdoc目录下的ps_guide.ps文件。 


另外还可参见: 
http://t16web.lanl.gov/Kawano/gnuplot/label-e.html#4.3 



5、gnuplot中如何插入Angstrom(埃)这个符号(A上面一个小圆圈) 

脚本中在插入前先加入 

gnuplot>set encoding iso_8859_1 

这个命令,然后就可以通过“{\305}”加入了。如横坐标要标上“k(1/Å)”: 

gnuplot>set xlabel 'k(1/{\305}) 



如果是multiplot模式,则这个命令必须放在 

gnuplot>set multiplot 

的前面。 



如果后面还要插入别的转义字符,那么还要在插入字符后加入如下命令: 

set encoding default 



安装包中gnuplot-4.0.0/docs/psdoc/ps_guide.ps文件中的表中的‘E’代表那一列的所有符号都用这个方法输入。 



6、gnuplot画等高线图 

gnuplot>splot ‘文件名.dat’ u 1:2:3 w l %做三维图 

gnuplot>set dgrid3d 100,100 %设置三维图表面的网格的数目 

gnuplot>replot 

gnuplot>set contour %设置画等高线 

gnuplot>set cntrparam levels incremental -0.2,0.01,0.2 %设置等高线的疏密和范围,数据从 -0.2到0.2中间每隔0.01画一条线 

gnuplot>unset surface 去掉上面的三维图形 

最后用鼠标拽动图形,选择合理的角度即可。或者直接设置(0,0)的视角也可以: 

gnuplot>set view 0,0 

gnuplot>replot 



这里注意,画三维图的数据文件必须是分块的,也就是x每变换一个值,y在其变化范围内变化一周,这样作为一块,然后再取一个x值,y再变化一周,作为下一数据块,等等。块与块之间用一空行格开。 



7、输出为ps或eps图时,以下几个选项值得特别注意 

gnuplot>set term postscript eps enh solid color 

其中eps选项表示输出为eps格式,去掉则表示用默认的ps格式;enh选项表示图中可以插入上下标、希腊字母及其它特殊符号,如果去掉则不能插入;solid选项表示图中所有的曲线都用实线,去掉则将用不同的虚线;color选项表示在图中全部曲线用彩色,去掉则将用黑白。 



8、如何画漂亮的pm3d图 

gnuplot> set pm3d %设置pm3d模式 

gnuplot> set isosamples 50,50 %设置网格点 

gnuplot> splot x**2+y**2 %画三维图 

gnuplot> splot x**2+y**2 w pm3d %画成pm3d模式,注意比较变化 

gnuplot> set view 0,0 %设置视角,(0,0)将投影到底面上去 

gnuplot> splot x**2+y**2 w pm3d %重画,注意看变化 

gnuplot> unset ztics %把z轴上的数字给去掉 

gnuplot> set isosamples 200,200 %使网格变细 

gnuplot> replot %重画,注意看变化,主要是过渡更光滑 



9、利用脚本文件避免重复输入 

有时候对某个数据文件做好一张图后,下次可能还要利用这个数据文件作图,但某个或某些设置要作些细微变化。这时候,可以把第一次作图时的命令全部写到一个文件里,如a.plt,下次只要将相应的设置做修改后,用下面的命令就会自动运行文件所有的命令而最后得到你要的图: 

gnuplot>load ‘a.plt’ 

作为一个例子,假设文件名为a.plt,里面的内容为: 

set pm3d 

set view 0,0 

unset ztics 

set isosamples 200,200 

splot x**2+y**2 w pm3d 

set term post color 

set output ‘a.ps’ 

replot 



那么启动gnuplot后,只要运行如下命令就可以了: 

gnuplot>load ‘a.plt’ 



如果我们要得到的仅仅是.ps或.eps图,那也可以在linux命令提示符下直接运行如下命令: 

[zxh@theory zxh]$gnuplot a.plt 



10、在gnuplot模式下运行linux命令 

在gnuplot提示符下也可以运行linux命令,但必须在相应的命令前面加上 ! 号。例如,假设很多参量都已经设置好了,但需要对某个数据文件a.dat进行修改后再画图,则可以用如下方式 

gnuplot>!vi a.dat 

通过这种方式,所有的linux命令都可以在gnuplot环境里运行。 



另外,也可以在gnuplot的提示符后输入shell,暂时性退出gnuplot,进入linux环境,做完要做的事情后,运行exit命令,又回到gnuplot环境下。 

gnuplot>shell 

[zxh@theory zxh]$vi a.f 

[zxh@theory zxh]$f77 a.f 

[zxh@theory zxh]$a.out (假设生成a.dat数据文件) 

[zxh@theory zxh]$exit 

gnuplot>plot ‘a.dat’ w l 

相关文章:

  • js去除空格12种方法
  • 与、或、异或、取反、左移和右移
  • oracle数据库设置了默认字段,但默认值无效
  • MFC应用程序向导生成的最简单程序HelloMFC详解
  • miniconda管理python[windows10]
  • eclipse中字体太小
  • C# Math函数 字符串、整数装换
  • 存储与虚拟机主机管理(五)
  • 短文本合并重复(去重)的简单有效做法
  • css布局,左右固定中间自适应实现
  • 写给兔小白的js教程(4)
  • 锐捷网络:让“店商”感知“大数据”的力量
  • 未来已来,4K激活字库产业新世代
  • Hadoop家族学习路线图
  • 让Ubuntu和Android同时运行(Ubuntu on Android)
  • Centos6.8 使用rpm安装mysql5.7
  • CSS盒模型深入
  • FastReport在线报表设计器工作原理
  • flask接收请求并推入栈
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JSONP原理
  • laravel5.5 视图共享数据
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • overflow: hidden IE7无效
  • php中curl和soap方式请求服务超时问题
  • 闭包--闭包作用之保存(一)
  • 从零开始学习部署
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用Swoole加速Laravel(正式环境中)
  • 微信小程序设置上一页数据
  • 一个完整Java Web项目背后的密码
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Python 之网络式编程
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​虚拟化系列介绍(十)
  • (39)STM32——FLASH闪存
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)setTimeout 和 setInterval 的区别
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET 的程序集加载上下文
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net专家(张羿专栏)
  • .sh
  • @TableLogic注解说明,以及对增删改查的影响
  • [2016.7.Test1] T1 三进制异或
  • [20171101]rman to destination.txt
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯