當前位置: 華文問答 > 科學

如何在論文中畫出漂亮的插圖?

2013-09-17科學

遇到安裝問題的請嘗試Anaconda這個Python發行版。下載安裝後直接使用即可,它幾乎預裝了所有要用到的科學計算及視覺化的庫。

有盆友在評論裏說希望能有完整的教程,確實就這個答案來說,離實際使用還有很大的距離,網上相關的中文資料也不多。不過真要寫起來這個答案也裝不下,況且寫在這個問題下也不是很恰當。等到那天我有專欄了再說吧,到時候也許會寫一個關於視覺化的系列教程。

=======分割線======

強烈推薦 Python 的繪圖模組

matplotlib: python plotting

。畫出來的圖真的是高端大氣上檔次,低調奢華有內涵~ 適用於從 2D 到 3D,從純量到向量的各種繪圖。能夠保存成從 eps, pdf 到 svg, png, jpg 的多種格式。並且 Matplotlib 的繪圖函式基本上都與 Matlab 的繪圖函式名字都差不多,遷移的學習成本比較低。開源免費。如圖所示(題目描述中的圖在最後):

(以下圖片均參照自

Thumbnail gallery

像這種普通的函式圖像:

plt . fill ( x , y1 , 'b' , x , y2 , 'r' , alpha = 0.3 )


以及這種 Scatter 圖(中文不知道該怎麽說…):

plt . scatter ( x , y , s = area , alpha = 0.5 )



精致的曲線,半透明的配色。都顯出你那高貴冷艷的X格,最重要的是只需一行程式碼就能搞定。從此以後再也不用忍受 Matlab以及GNUPlot 中那蛋疼的配色了。

想畫 3D 數據?沒有問題 (不過用 mayavi 可能更方便一些):

ax . plot_surface ( X , Y , Z , rstride = 8 , cstride = 8 , alpha = 0.3 ) cset = ax . contourf ( X , Y , Z , zdir = 'z' , offset =- 100 , cmap = cm . coolwarm ) cset = ax . contourf ( X , Y , Z , zdir = 'x' , offset =- 40 , cmap = cm . coolwarm ) cset = ax . contourf ( X , Y , Z , zdir = 'y' , offset = 40 , cmap = cm . coolwarm )


四行程式碼你就能擁有(後三行是畫座標平面上的等高線,嚴格的額說還是一行)。

除此以外,不過你是向量場,網路還是什麽奇葩的需求都能夠搞定:

plt . streamplot ( X , Y , U , V , color = U , linewidth = 2 , cmap = plt . cm . autumn ) plt . colorbar ()



plt . triplot ( x , y , triangles , 'go-' ) plt . title ( 'triplot of user-specified triangulation' ) plt . xlabel ( 'Longitude (degrees)' ) plt . ylabel ( 'Latitude (degrees)' )



ax = plt . subplot ( 111 , polar = True ) bars = ax . bar ( theta , radii , width = width , bottom = 0.0 )



這還沒完,Matplotlib 還支持Latex公式的插入,當別人畫的圖還是這個樣子的時候(以下圖片參照自

Matplotlib Tutorial(譯)

你能夠把它變成這個樣子:

如果再搭配上 IPython 作為執行終端(這張圖是自己的~):

簡直就是神器啊,有木有!

心動不如行動,還等什麽?

(奉上教程一篇

Matplotlib Tutorial(譯)


==== Update: 2013-9-18 18:04 ====

@許鋮

同學提醒,再補充一句,matplotlib 還可以話 xkcd 風格的圖呦~

(圖片參照自網路)

此外結合 IPython Notebook 後更多精彩內容,請看

http:// nbviewer.ipython.org/

==== Update: 2013-9-19 20:04 ====

如果嫌安裝麻煩並且恰好在 Windows 系統下的話可以嘗試Python的一個發行版

winpython - Portable Scientific Python 2/3 32/64bit Distribution for Windows

==== Update: 2013-10-1 23:45 ====

鑒於

@van li

同學質疑 matplotlib 是否能畫出題目中所示的影像,我在這裏將題目中的影像用 matplotlib 畫出來如下:

程式碼在此處:

https:// gist.github.com/coldfog /c479124328fc6bb8b789

程式碼在此處:

https:// gist.github.com/coldfog /5da63a6958fc0a949b52

======== 2014.5.10更新======

看到樓下有人說配色和好看,唉....那我也貼幾個吧...只不過當初限於篇幅沒有寫而已。

首先,python 有一個專門的配色包

jiffyclub/brewer2mpl 路 GitHub

,提供了從美術角度來講的精美配色(戳這裏感受

ColorBrewer: Color Advice for Maps

)。

此外還有一些致力於美化繪圖的庫,用起來也都非常方便,比如

olgabot/prettyplotlib 路 GitHub

廢話不多說,上圖就是王道。

(一下圖片來源網路)

有人可能會說需要復雜的設定,其實也不用。比如上邊這幅圖,只需要多加一個參數就好:

cmap = brewer2mpl . get_map ( 'RdBu' , 'diverging' , 8 , reverse = True ) . mpl_colormap ,

樓下說到統計繪圖。嘛 seaborn (

https:// github.com/mwaskom/seab orn

) 是一個呼叫 matplotlib 的統計繪圖庫,上圖:

程式碼一行,後邊的幾乎都是一行,沒做其他設定,預設就這樣。我就不貼其他的程式碼了:

g = sns.jointplot(x1, x2, kind="kde", size=7, space=0)


這還有個更炫酷的可互動式的繪圖,大家自己戳開看吧

http:// nbviewer.ipython.org/gi thub/plotly/python-user-guide/blob/master/s0_getting-started/s0_getting-started.ipynb

哼哼,完爆了吧~~~~\(≧▽≦)/~