如何畫出會動的曲線圖?作圖技術進階之必備技能
畫圖是理工科工作者的必備技能,以前總結過畫圖常用軟體:你一定要知道的十款主流畫圖軟體,淡定的工作從畫出高品格圖片開始
也許你已能用它們熟練地畫出美美的tif,jpg,bmp或者emf等格式的圖片。
確實,以此用於發論文或寫結題報告都應該已經夠用了。
但是別忘了:無論畢業以後是繼續學術、還是去企業上班,都可能會遇到各種需要做報告的情況。
比如畢業答辯、比如部門總結彙報、比如招標投標競爭……
這時候,如果能在做報告的PPT裡面插入這樣一副動圖:(各參數隨時間的演化,以下圖片取自google搜索,侵刪)
或者這樣的動圖:(隨時間的增加,兩根曲線或多根曲線的交點變化情況)
或者這樣:
是不是瞬間感覺自己的報告高大上起來?
沒錯,看到你秀出來會動的曲線圖之後,慧眼識才的領導眼前一亮、直接嘴動點贊、稱許滿滿;中意了很久的男神女神,投來了崇拜和火辣的眼神;遠處曾經囂張的競爭對手一臉的失落,自嘆技不如人在牆角默默流淚。
要的就是這種碾壓的效果。(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) 隨時間衰減的分布曲線圖
set term gif animateoptimize delay 2 size 480,360
set output movie.gif
do for [i = 0:400 ] {
t=i*0.02
plot sqrt(1/(1+t*t))*exp(-(x-t)**2/(1+t*t)) lw 2
}
set out
set terminal wxt enhanced
(2) 等高線及其二維投影隨時間變化圖
#set term gif animate optimize delay 10 size 480,480
#set output movie.gif
set pm3d at b
set xr[-5:10]
set yr[-5:10]
set zr[0:1]
set cbr[0:1]
set isosamples 50
dofor [i = 0:50 ] {
t=i*0.05
splot sqrt(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
set param
set size ratio -1
set samples 10000
e = 1
omega=0.1
set tr[1:600]
do for [i = 1:200 ] {
plot e*cos(omega*t)/sqrt(t), sin(omega*t)/sqrt(t)
set label 1 pointpt 7 ps 3 at e*cos(omega*i*3)/sqrt(i*3),sin(omega*i*3)/sqrt(i*3)
}
#set out
#set terminal wxt enhanced
(4) 兩顆行星互相纏繞,最後墜毀在一起
set param
set samples 10000
set tr[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
plot 10e0*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) lt 1 lc 2
}
#set out
#set terminal wxt enhanced
3. 複雜的例子
除了上面正經的動態曲線圖,gnuplot還可以用來干一些不正經的事情。比如:
(1) 巫婆帶著烏鴉海上飛
(2) 超級馬里奧從洞里鑽出來(3) 電磁炮
(4) 時鐘
(5) 騎摩托車上下坡
(6) 跳舞的星星
看到這裡,是不是覺得這小軟體還有那麼點意思? 快去學習吧。畫動態曲線圖的技術,你值得擁有。
============================
整齊的排版請見這裡:如何畫出會動的曲線圖?作圖技術進階之必備技能
另,歡迎關注我的微信公號「科研加油站」(keyanbc),不定時po一些科研乾貨、論文寫作中的經驗教訓、作圖技巧、技術宅和好玩的東西。在對話框界面回復gnuplot可獲取上面提及教程、軟體、以及例子。
另2,還有一些可能有用的文章:
1論文寫作
論文查重:防止被查重系統誤傷的幾個注意事項
研究生第一篇學術論文常犯問題總結寫論文和報告容易犯的低級錯誤論文寫作應該注意的八個細節SCI投稿全過程信件模板發表SCI論文有哪些實用工具?2實用妙招
編輯公式效率太低?來看MathType的重要技巧
如何把圖片格式的Pdf轉化為可編輯的Word?如何使用Matlab將其畫出的圖片,直接生成PPT?21個最出名最好用的免費電子書下載網站搜不到專業的資料、文獻和數據?用這些網站試試Google學術網址打不開如何愉快地科研?3作圖技巧
你一定要知道的十款主流畫圖軟體
如何把別人論文中的曲線圖,自動轉化為數據點?高級版:如何從別人論文的曲線圖中獲取數據點?如何在橫縱坐標、標題上顯示公式或特殊符號?如何自動裁剪掉圖像多餘的白邊和坐標系邊框?Matlab導出高清圖片的正確方法4編程技巧
最常用的10個Matlab快捷鍵
最值得學習的Matlab參考書有哪些?如何只用一個小時實現Matlab的快速入門?媲美Matlab的神器——Python語言的十本入門經典Matlab數學建模演算法全收錄,數學建模比賽必備Matlab中提高m文件執行效率的小技巧5技術宅
買西瓜的高級玩法,用好你的智能手機
家裡沒人怎麼防火防盜?裝上這段自動看家程序半夜看小說傷眼睛怎麼辦?放學快走,你的電腦在實驗室自己喊啪嗒!如何利用普通計算器求解高次方程的解手機還能幹這事?以後再也不擔心忘帶激光筆了推薦閱讀: