首頁  >  文章  >  後端開發  >  用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

王林
王林轉載
2023-04-13 15:01:061299瀏覽

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

正文

##大家好,我是Python人工智慧技術


方法一     

#強烈推薦Python 的繪圖模組matplotlib: python plotting 。畫出來的圖真的是高端大氣上檔次,低調奢華有內涵~ 適用於從 2D 到 3D,從標量到向量的各種繪圖。能夠保存成從 eps, pdf 到 svg, png, jpg 的多種格式。而 Matplotlib 的繪圖函數基本上都與 Matlab 的繪圖函數名字都差不多,遷移的學習成本比較低。開源免費。如圖所示(題目描述中的圖在最後):(以下圖片皆引用自Thumbnail gallery )


像是這種普通的函數圖象:


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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

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


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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

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


想畫 3D 資料?沒有問題(用mayavi可能比較方便):


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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)

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


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


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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

這還沒完,Matplotlib 也支援Latex公式的插入,當別人畫的圖還是這個樣子的時候(以下圖片引用自Matplotlib Tutorial(譯) )


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

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


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


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


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

(圖片引用自網路)


此外結合IPython Notebook 後更多精彩內容,請看http://nbviewer.ipython.org/


如果嫌安裝麻煩且剛好在Windows 系統下的話可以嘗試Python的一個發行版winpython - Portable Scientific Python 2/3 32/64bit Distribution for Windows。


鑑於@van li同學質疑matplotlib 是否能畫出題目中所示的圖像,我在這裡將題目中的圖像用matplotlib 畫出來如下:


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

#程式碼在此:


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


用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

#程式碼在此:


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


#

看到楼下有人说配色和好看,唉....那我也贴几个吧...只不过当初限于篇幅没有写而已。另外,搜索公众号顶级python后台回复“进阶”,获取一份惊喜礼包。

首先,python有一个专门的配色包jiffyclub/brewer2mpl,提供了从美术角度来讲的精美配色(戳这里感受ColorBrewer: Color Advice for Maps)。

此外还有一些致力于美化绘图的库,用起来也都非常方便,比如olgabot/prettyplotlib 。

废话不多说,上图就是王道。(下面图片来源网络)

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

有人可能会说需要复杂的设置,其实也不用。比如上边这幅图,只需要多加一个参数就好:

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

楼下说到统计绘图。嘛seaborn 是一个调用 matplotlib 的统计绘图库,上图:

(https://github.com/mwaskom/seaborn)  

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

代码一行,后边的几乎都是一行,没做其他设置,默认就这样。我就不贴其他的代码了:

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

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

还有个更炫酷的可交互式绘图,大家自己戳开看吧:

http://nbviewer.ipython.org/github/plotly/python-user-guidechaocc/blob/master/s0_getting-started/s0_getting-started.ipynb

遇到安装问题的请尝试Anaconda这个Python发行版。下载安装后直接使用即可,它几乎预装了所有要用到的科学计算及可视化的库。

有盆友在评论里说希望能有完整的教程,确实就这个答案来说,离实际使用还有很大的距离,网上相关的中文资料也不多。不过真要写起来这个答案也装不下,况且写在这个问题下也不是很恰当。等到那天我有专栏了再说吧,到时候也许会写一个关于可视化的系列教程。

方法二

翻遍这个问题下的所有回答,发现凡是提到Matlab的,其评价中常有‘锯齿’,‘菜鸟’,‘难看’,‘不忍直视’等标签。

然而,2020年了,技术提升了,观念进步了,当一些基本问题解决后,Matlab还那么‘不堪’吗?

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

观察Mathematica、Origin、Python/matplotlib、R/ggplot2等软件绘制的数据、结果图,其与Matlab图的差异主要体现在点、线、面等对象属性(位置、尺寸、颜色等)的不同上。

既然只是属性的不同,那是不是只要修改一下这些信息,就可以实现各种软件绘图风格之间的转换了呢?

答案是肯定的。

比如,这是高赞回答 @冯昱尧用Python/matplotlib绘制的一幅图:

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

我们用Matlab默认属性来绘制,效果是这样的(没加误差棒):

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

然後,只需再修改一下位置、尺寸、顏色等信息,就可以得到風格差不多的圖(沒加誤差棒):

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

當我們用這個想法來思考該如何繪製插圖時,就很容易實現自己的小想法,仿造甚至創造出理想的插圖。

例如,某一天,發現傍晚的天空顏色很美,心想:為什麼不能把它畫到論文插畫裡呢? (見:Matlab論文插畫配色2-自然漸層)

於是,

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!



用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!




# #再例如,某一天,看到女朋友的照片,覺得很美,心想:為什麼不能把她畫到論文插圖裡呢? (見:Matlab論文插畫配色1-是女朋友的顏色)


於是,



這時,有朋友就要說了:「哎呀答主,你整這些個花里花哨的東西,還不是得一行代碼一行代碼的敲出來啊,太麻煩了吧。」


##此言差矣。

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!就像R有ggplot2,Python有matplotlib,Matlab其實也有很多現成的繪圖工具包,並不需要你自己開發。

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!例如,

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!Pierre Morel [1] 結合ggplot2,開發了gramm工具,用於繪製複雜圖形。

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!Inspired by ggplot2 (Wickham 2009), the R implementation of “grammar of graphics” principles (Wilkinson 1999), gramm improves Matlab's plotting functionality, 1999), gramm improves Matlab's plotting functionality, 3allowing to gene 庫code.

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!範例效果如下:

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!





用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

###############類似的,Stephen Cobeldick [2] 將matplotlib配色方案移植到了Matlab。 #########也就是說,在Matlab中就可以直接用matplotlib的配色方案了,就不必總是‘jet’了。 #########The MatPlotLib 2.0 default colormaps ported to MATLAB. This submission also includes the Line ColorOrder colormaps!#########範例效果如下:###################################################################################################################################################################################### #####

用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!

還有很多專門針對論文插畫的工具包,這裡就不一一介紹了。

總的來說,工具只是工具,它們並沒有高低貴賤之分。

若想畫出好看的插圖,關鍵還是在於使用工具的人。

集中一點,登峰造極。

參考:

#https://www.php.cn/link/b3ddb7c5b10be95dbc3f9152c58becce

https://www.php.cn/link/171ae1bbb81475eb96287dd78565b38b

###

以上是用 Python 畫如此漂亮的專業插圖 ?簡直 So easy!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除