如何画出会动的曲线图?作图技术进阶之必备技能
点击上方“科研充电宝”,可以添加关注。
画图是理工科工作者的必备技能,以前3M君给大家总结过画图常用软件:
也许你已能用它们熟练地画出美美的tif,jpg,bmp或者emf等格式的图片。
确实,以此用于发论文或写结题报告都应该已经够用了。
但是别忘了:无论毕业以后是继续学术、还是去企业上班,都可能会遇到各种需要做报告的情况。
比如毕业答辩、比如部门总结汇报、比如招标投标竞争……
这时候,如果能在做报告的PPT里面插入这样一副图:(各参数随时间的演化)
或者这样的动图:(随时间的增加,两根曲线或多根曲线的交点变化情况)
或者这样:
是不是瞬间感觉自己的报告高大上起来?
没错,看到你秀出来会动的曲线图之后,慧眼识才的领导眼前一亮、直接嘴动点赞、称许满满;中意了很久的男神女神,投来了崇拜和火辣的眼神;远处曾经嚣张的竞争对手一脸的失落,自叹技不如人在墙角默默流泪。
要的就是这种碾压的效果。(ps,以上情景纯属歪歪,若无雷同,概不负责…)
效果好是好,可问题是:
(1) 用什么方法能画出这样的图?
(2) 画这种图会不会很麻烦?
麻不麻烦取决于你用什么样的工具。
比如,如果打算采用Matlab,虽然用它自带的诸如movie2avi等函数也可以实现,但是效果并不见得很好。
再比如,如果打算用Flash做动画,那么就是高射炮打蚊子。
这里,隆重推荐今天的主角——gnuplot。
1. gnuplot的基本概念
把gnuplot看成gunplot的童鞋,你阅读速度有点略快啊。也许你最近有点焦虑、烦闷?别着急,一切都会好起来的。
gnuplot画出来的静态图长这样:
gnuplot是一个免费软件,可以在window,linux,mac等系统下使用。
它使用交互式介面,可以绘制数学函数2D或者3D图形,也可以从纯文字档读入数据、绘制统计图表等等,还包含数学计算、拟合等功能。
对于用惯了鼠标的童鞋而已,这里可能有个坏消息:gnuplot是基于命令行的交互式绘图软件。
打开一个终端,输入gnuplot,随着程序启动,会出现下面的信息:(如果是在Windows 电脑上,双击gnuplot.exe 后会自动打开一个命令行窗口)
不过不用太慌张,零基础的童鞋对照教程,大概只用不到半天的时间就能学会(教程在后面会提到)。
2. 简单的例子
采用gnuplot画动态曲线图的原理是:多次画图并把所有图片压缩成一个gif动画。具体可使用reread命令或者do for命令。
下面是一些动图的例子和代码,其它简单的曲线可以此类推:
(1) 随时间衰减的分布曲线图
settermgifanimateoptimize delay2size480,360
setoutput’movie.gif’
do for[i =0:400]{
t=i*0.02
plotsqrt(1/(1+t*t))*exp(-(x-t)**2/(1+t*t))lw2
}
setout
setterminalwxtenhanced
(2) 等高线及其二维投影随时间变化图
#set term gif animate optimize delay 10 size 480,480
#set output ‘movie.gif’
setpm3datb
setxr[-5:10]
setyr[-5:10]
setzr[0:1]
setcbr[0:1]
setisosamples50
dofor[i =0:50]{
t=i*0.05
splotsqrt(1/(1+t*t))*exp(-(x-t)**2/(1+t*t))*sqrt(1/(1+t*t))*exp(-(y-2*t)**2/(1+t*t))
}
#set out
#set terminal wxt enhanced
(3) 小行星轨迹图
#set term gif animate optimizedelay 5 size 960,720
#set output ‘movie.gif’
setparam
setsizeratio-1
setsamples10000
e =1
omega=0.1
settr[1:600]
do for[i =1:200]{
plote*cos(omega*t)/sqrt(t),sin(omega*t)/sqrt(t)
setlabel1pointpt7ps3ate*cos(omega*i*3)/sqrt(i*3),sin(omega*i*3)/sqrt(i*3)
}
#set out
#set terminal wxt enhanced
(4) 两颗行星互相缠绕,最后坠毁在一起
setparam
setsamples10000
settr[0.01:1]
imax=100
tmax=20e0*pi
ht=tmax/real(imax)
#set term gif animate optimizedelay 6 size 600,600
#set output ‘orbit.gif’
do for[i=1:imax]{
th(t,i)=t*real(i)*ht
plot10e0*sin(th(t,i))/th(t,i),10e0*cos(th(t,i))/th(t,i),
10e0*sin(th(t,i)-pi)/th(t,i),10e0*cos(th(t,i)-pi)/th(t,i)lt1lc2
}
#set out
#set terminal wxt enhanced
3. 复杂的例子
除了上面正经的动态曲线图,gnuplot还可以用来干一些不正经的事情。比如:
(1) 巫婆带着乌鸦海上飞
(2) 超级马里奥从洞里钻出来
(3) 电磁炮
(4) 时钟
(5) 骑摩托车上下坡
(6) 跳舞的星星
看到这里,是不是觉得这小软件还有那么点意思?教程、软件、以及例子,可在公众号对话框界面回复gnuplot获取。
画动态曲线图的技术,你值得拥有。
(END)
1论文写作
2实用妙招
3作图技巧
4编程技巧
5技术宅