同样作为画图工具,gnuplot和matplotlib有啥异同点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同样作为画图工具,gnuplot和matplotlib有啥异同点相关的知识,希望对你有一定的参考价值。

参考技术A 0. 运行脚本
0.1 把代码写在一个文件file中gnuplot file就可以了(曾经在电脑上这样运行有问题,不知道为什么自动好了……)
0.2 Shell 脚本运行[1]一个简单范例:==============#! /bin/sh DATE=$(date '+%d-%m-%Y-%Hh%Mm%S') gnuplot <<EOFset term postscript landscape set output '$DATE.ps' set xrange[1:10]plot x EOF==============注:注意脚本每行末尾不要留空格,不然常会报错。(血泪亲测555)比如EOF之后如果存在空格,上述脚本出现这样的错误信息:./test: line 10: warning: here-document at line 5 delimited by end-of-file (wanted `EOF')gnuplot> EOF ^ line 0: invalid command1. 设置输出格式PS格式:彩色(推荐使用):set term postscript enhanced colorset output "*.ps"另:(未测)set term postscript landscapeset output "*.ps"EPS格式:黑白(曲线类型控制未知):set term postscript eps enhancedset output "*.eps"忘了是啥:set term post eps color solid enhset output "*.eps"PNG格式:set terminal png size 1500,1000 enhanced font "Helvetica,20"set output '*.png'PDF格式需要装有ps2pdf,然后:set term postscript enhanced colorset output "| ps2pdf - *.pdf"注:关于pdf图片,输出后周围的大片空白可以在终端中使用如下命令去除 [5]:pdfcrop *.pdf会生成一个新文件: *-crop.pdf使用此pdf文件在Latex等处都将十分整洁方便,妈妈再也不用担心我的图片了。2. 图片设置2.1 设置图片/字体大小set size 0.6,0.6字体大小设置比较复杂,此命令是按比例缩放图片大小,字体大小不变,相当于字体相对变大。2.2 设置/取消命名(位于图上方)set title "figurename""unset title注:在多图设置(见8小节)中,命名命令对其后所有图生效,要在每个图中重新命名。之后不需要命名时要记得取消。3. 设置/取消背景网格set gridunset grid如果网格为极坐标系,则set grid polar4. 设置图注4.1 图注在图中的位置set key left/right top/bottom/center4.2 图注增加/取消外框set/unset key box4.3 图注间距set key spacing 1.54.4 图注位于图外set key lmargin/rmargin/tmargin/bmargin(below)4.5 取消图注unset key4.6 图注设置参数一览:set key on|off default inside | outside | lmargin | rmargin | tmargin | bmargin | at <position> left | right | center top | bottom | center vertical | horizontal Left | Right noreverse noinvert samplen <sample_length> spacing <vertical_spacing> width <width_increment> height <height_increment> noautotitle columnheader title "<text>" noenhanced nobox linestyle | ls <line_style> | linetype | lt <line_type> linewidth | lw <line_width> unset key show key5. 设置坐标轴5.1 设置坐标轴范围5.1.1 设置给定坐标轴范围[4]set xrange/yrange [1:100]也可以设置负向坐标set xrange/yrange [100:1]只设置一端坐标(另一端将自动调整)set xrange/yrange [:100]5.1.2 恢复自动坐标轴范围(此时人工给定设置依然保留)set auto x/y5.1.3 恢复给定坐标轴范围set noauto x/y注:关于 set [no]auto x/y 与 reset (见n.3小节) 的测试,可参考网址[2]5.2 设置/取消坐标名称set xlabel/ylabel "name"unset xlabel/ylabel5.3 设置坐标轴标识5.3.1设置坐标轴最大间隔(显示数值)set xtics/ytics 0.55.3.2 设置坐标轴小间隔set mxtics/mytics 2说明:将每个大间隔平分为2份5.3.3 设置标识文本显示倾斜度set xtics rotate by -45说明:标识右倾45度5.4 设置指数坐标轴set log x/yset xtics 1.5说明:设置指数坐标轴的间隔时,数字代表10的指数(待明)。注意此时坐标的值域必须大于0。5.5 移动坐标标记set x/ytics [out] offset 1,1"1,1" 为对应的移动向量的x,y值。(未验证)6. 作图-曲线6.1 从数据作图6.1.1 从不同数据文件作图plot "1p.dat" u 1:2 w lp lt 1 pt 1 lc 1 lw 3 title "1", \"2p.dat" u 1:2 w lp lt 1 pt 2 lc 7 lw 3 title "2", \"3p.dat" u 1:2 w lp lt 1 pt 3 lc 3 lw 3 title "3", \"4p.dat" u 1:2 w lp lt 1 pt 4 lc 4 lw 3 title "4"说明:u 1:2 =使用*.dat文件中的1,2列作为x,y作图;w lp =with line and points,作曲线并标出数据点;w l =with line,只作出曲线;w p =with points,只作数据点;这些似乎可以在plot之前通过一行命令整体设置:set style data linespoints(待测)ls=linestyle 可自己设置,通过:set linestyle 1 lt 1 lc 2 lw 3lt =line type, 曲线类型。已定义,见图片;pt = point type, 描点类型。已定义,见⋯⋯;lc =line color, 曲线颜色。已定义,见图片;也可使用rgb数值:lc rgb "#00FF00"lw =line width, 曲线宽度。按数值依次增大;title 可简写做 ti ;使用数据所在列的抬头做title:title columnheader(n)n 代表第n列;如果不需要曲线名称,使用 notitle;plot "*.dat" u 1:2 notitle使用"\"分行,使代码更工整。6.1.2 从同一个数据文件作图plot "1p.dat" u 1:2 w l ti "col2", \"1p.dat" u 1:3 w l ti "col3"可简写为:plot "1p.dat" u 1:2 w l ti "col2", \" " u 1:3 w l ti "col3"(可写做:" " u 3 w l ti "col3" 吗?待测)6.1.3 作图命令内部循环 (待亲测!)plot 'dat.dat' u 2:xtic(1) title columnheader(2), \for [i=3:22] ' ' u i title columnheader(i)6.1.4 读取数据gnuplot默认数据分割符号是空格。如果文件中用逗号分割数据,可在gnuplot中使用如下命令:set datafile separator ","6.2 函数作图6.2.1 定义常量a=36.2.2 定义函数:6.2.2.1 简单定义f(x)=ax函数范例:f(x)=(1.58*log(x)-3.28)**(-2.)s(x)=0.1384*x**(-0.273)*a**(0.0782)*(2./a)**(0.253)说明:**代表幂指数数据写做“2”代表整型,“2.”代表浮点型。会影响计算结果的精度。(批:这些规矩似乎和 Fortran 一致)6.2.2.1 定义函数在特定区间上有效[3]使用 “?” 以及 “1/0”f(x) = ( 0 < x && x < 1 ) ? sin(x) : 1/06.2.3 直接作函数图plot (1.58*log(x)-3.28)**(-2.)6.2.4 使用已定义函数作图plot f(x)6.3 重新做前一个图replot6.4 双x/y坐标轴set x2/y2ticsset x2/y2range[nb1:nb2]plot … axes x1y2或者 x2y2, 任意。7. 在特定位置放置标签7.1 位置坐标依照坐标轴set label "(0,0) first" at first 0, first 07.2 位置坐标依照画图区域(图域左下角为(0,0))set label "(0,0) graph" at graph 0, graph 07.3 位置坐标依照整个图片(图片左下角为(0,0))set label "(0,0) screen" at screen 0, screen 0注:效果等于set label "(0,0) screen" 0, 08. 多图设置使用范例说明如下:此为四小图横向排列。set multiplot说明:多图设置开始set size 0.27,1说明:定义每张小图的尺寸。可在每张小图开始前分别设置。set origin -0.005,0说明:设置图1的起始位置。以左下角坐标为准。plot "*line1.dat" u 1:2 w lp title "line1"set origin 0.24,0说明:设置图2的起始位置。plot "line2.dat" u 1:2 w lp title "line2"set origin 0.485,0说明:设置图3的起始位置。plot "line3.dat" u 1:2 w lp title "line3"set origin 0.73,0说明:设置图4的起始位置。plot "line4.dat" u 1:2 w lp title "line4"unset multiplot说明:多图设置结束注:不仅限于做并列放置的图。需要在大图中做小图时,也是采用此方法。9. 利用gnuplot作Fourier变换(fft)可以吗???10. 作直方图 (histogram)set style fill solid 1.00 border 0说明:或者border -1, 暂时不清楚作用……set boxwidth 0.9 absolute说明:设置方柱宽度set style histogramset style data histogram (or 'histograms')set style histogram clustered gap 1 title offset character 0, 0, 0 说明:不清楚……plot 'dat.dat' u 2:xtic(1) ti col lc 1注意:此处x,y的顺序是相反的。更多绚例请见[8]11. 数学公式书写11.1 上下标上标:U^upper下标:U_lower说明:下标上标类似其他科学软件(如Latex)中数学公式之表达。11.2 各种符号点乘符号multiplication dot:"/Symbol \327"示例[6]:t = "/Symbol \327" # multiplication dotset xtics ("-3".t."10^3" -3e3, "-2".t."10^3" -2e3, "-10^3" -1e3, "0" 0, \ "10^3" 1e3, "2 10^3" 2e3, "3 10^3" 3e3)其他符号陆续更新……11.3 数字格式set format x "%10.3f"引号中格式参见[7] “How do I change the format of the numbers ?”。n. 其他事项n.1 注释使用符号"#"。用在最后一行plot的曲线时,貌似会有警告提示。n.2 恢复设置reset注:似乎是将所有设置清零(未测试)n.3 退出gnuplotquit============== temple 1 ============================单图设置范例 ===================================================set term postscript enhanced colorset output "temple1.ps"set size 0.6,0.6set gridset key right topset key boxset key spacing 1.5set xrange [0:100]set yrange [0:100]set xlabel "xlabel"set ylabel "ylabel"set xtics 10set ytics 10set mxtics 5set mytics 5plot "1.dat" u 1:2 w l lt 1 lc 1 lw 3 title "1", \"2.dat" u 1:2 w l lt 1 lc 7 lw 3 title "2", \"3.dat" u 1:2 w l lt 1 lc 3 lw 3 title "3", \"4.dat" u 1:2 w l lt 1 lc 4 lw 3 title "4",\"1p.dat" u 1:2 w lp lt 1 pt 1 lc 1 lw 3 title "1", \"2p.dat" u 1:2 w lp lt 1 pt 2 lc 7 lw 3 title "2", \"3p.dat" u 1:2 w lp lt 1 pt 3 lc 3 lw 3 title "3", \"4p.dat" u 1:2 w lp lt 1 pt 4 lc 4 lw 3 title "4"============ temple 2 ============================ 多图设置范例。只保留了图1中的y坐标名称。==================================================set term postscript enhanced colorset output "temple2.ps"set multiplotset key left centerset key boxset key spacing 1.5set xrange [0:100]set yrange [0:100]set xlabel "u_average[m/s]"set ylabel "y[m]"set xtics 10set ytics 10set mxtics 5set mytics 5set size 0.27,1set origin -0.005,0plot "1.dat" u 1:2 w l lt 1 lc 1 lw 3 title "1"unset ylabelset origin 0.24,0plot "2.dat" u 1:2 w l lt 1 lc 7 lw 3 title "2"set origin 0.485,0plot "3.dat" u 1:2 w l lt 1 lc 3 lw 3 title "3"set origin 0.73,0plot "4.dat" u 1:2 w l lt 1 lc 4 lw 3 title "4"unset multiplo本回答被提问者和网友采纳

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和matplotlib有啥异同点的主要内容,如果未能解决你的问题,请参考以下文章

GNUPLOT画图工具

Octave 作图 无响应

外部程序调用+装饰器-16

gnuplot:如何在每个像素上无边距绘制一个2D数组元素

晒晒你们的画图工具都有?

ns2网络仿真工具 gnuplot显示结果