1. 程式人生 > >如何在python論文中畫出漂亮的插圖?-from知乎

如何在python論文中畫出漂亮的插圖?-from知乎

強烈推薦 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 資料?沒有問題:

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 後更多精彩內容,請看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 畫出來如下:

程式碼在此處:gist.github.com/coldfog
程式碼在此處:強烈推薦 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 資料?沒有問題:

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 後更多精彩內容,請看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 畫出來如下:

程式碼在此處:gist.github.com/coldfog