如何畫出會動的曲線圖?作圖技術進階之必備技能

畫圖是理工科工作者的必備技能,以前總結過畫圖常用軟體:你一定要知道的十款主流畫圖軟體,淡定的工作從畫出高品格圖片開始

也許你已能用它們熟練地畫出美美的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技術宅

買西瓜的高級玩法,用好你的智能手機

家裡沒人怎麼防火防盜?裝上這段自動看家程序

半夜看小說傷眼睛怎麼辦?

放學快走,你的電腦在實驗室自己喊啪嗒!

如何利用普通計算器求解高次方程的解

手機還能幹這事?以後再也不擔心忘帶激光筆了


推薦閱讀:

UCSD 2017秋季數據科學項目閃亮登場!
Think Bayes - 我所理解的貝葉斯定理

TAG:数据 | 科研 | 论文 |