当前位置: 首页 > 科技观察

用Python画这么漂亮的专业插画?它是如此容易!

时间:2023-03-18 16:05:04 科技观察

文大家好,我是Python人工智能技术方法1强烈推荐Python的绘图模块matplotlib:pythonplotting。画出来的图真是高端有档次,低调奢华有内涵~适用于2D到3D,从标量到矢量的各种绘图。它可以保存为各种格式,从eps、pdf到svg、png、jpg。并且Matplotlib的绘图函数与Matlab的绘图函数基本同名,迁移的学习成本比较低。开源且免费。如图(题目描述中的图片在最后):(以下图片均引用自缩略图库)像这样普通的函数图:plt.fill(x,y1,'b',x,y2,'r',alpha=0.3)和这张散点图(我不知道中文怎么说...):plt.scatter(x,y,s=area,alpha=0.5)精致的曲线,半透明颜色匹配。尽显高贵魅力,最重要的是一行代码即可。从此,我再也不用忍受在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('用户指定三角测量的三重图')plt.xlabel('经度(度)')plt.ylabel('纬度(度))')ax=plt.subplot(111,polar=True)bars=ax.bar(theta,radii,width=width,bottom=0.0)这还没完,Matplotlib也支持插入Latex公式,当别人draw的时候还是这个样子(下图引用自MatplotlibTutorial(翻译)),你可以把它变成这个样子:如果你用IPython作为运行终端(这张图是自己画的~):简直了神器,有没有!行动不如心跳,你还在等什么?有同学@许吼提醒,补充一点,matplotlib也可以使用xkcd风格的图片~(图片引用自网络)另外,更多结合IPythonNotebook的精彩内容,请看http://nbviewer.ipython.org/如果你觉得安装麻烦,而且你正好在Windows系统下,你可以试试Python的发行版winpython-PortableScientificPython2/332/64bitDistributionforWindows。针对@vanli的问题matplotlib能否绘制出题中所示的图像,我将题中的图像用matplotlib绘制如下:代码在这里:https://gist.github.com/coldfog/c479124328fc6bb8b789的代码在这里:https://gist.github.com/coldfog/5da63a6958fc0a949b52看到楼下有人说配色好看,唉。。。那我贴几个。。。但是我没写由于篇幅限制,仅此而已。另外,搜索公众号顶级蟒蛇背景,回复“进阶”即可获得惊喜礼包。首先,python有一个专门的配色包jiffyclub/brewer2mpl,从艺术的角度提供精美的配色(体验ColorBrewer:地图配色建议点这里)。另外还有一些专门美化绘图的库,使用起来非常方便,比如olgabot/prettyplotlib。废话不多说,上图为王。(下图来自网络)可能有人会说需要复杂的设置,其实没有必要。比如上图,只需要多加一个参数:cmap=brewer2mpl.get_map('RdBu','diverging',8,reverse=True).mpl_colormap,楼下就是统计绘图。嗯,seaborn是一个调用matplotlib的统计绘图库。上图:(https://github.com/mwaskom/seaborn)代码一行,下面几乎都是一行。其他的没有做任何设置,默认是这样的。其他代码我就不贴了:g=sns.jointplot(x1,x2,kind="kde",size=7,space=0)还有一个比较爽的互动剧情,大家可以戳出来自己看看吧:http://nbviewer.ipython.org/github/plotly/python-user-guidechaocc/blob/master/s0_getting-started/s0_getting-started.ipynb如果遇到安装问题,请尝试Python发行版Anaconda。下载安装后可以直接使用。它预装了几乎所有要使用的科学计算和可视化库。有小伙伴在评论中表示,希望能有完整的教程。确实,就这个答案而言,离实际使用还有很长的路要走,网上相关的中文资料也不多。但是如果真的要写这个答案,我就hold不住了,写在这个问题下也不是很合适。我会等到那天我有专栏的时候,也许我会写一个关于可视化的教程系列。方法2把这个问题下的所有答案都翻一遍,发现提到Matlab的人在评价中往往带有'锯齿'、'菜鸟'、'丑陋'、'不忍直视'等标签。不过2020年,技术进步了,观念也进步了。当一些基础问题都解决了,Matlab还那么“不堪”吗?观察Mathematica、Origin、Python/matplotlib、R/ggplot2等软件绘制的数据和结果图,它们与Matlab图的区别主要体现在对象属性(位置、大小、颜色等)上的差异。)如点、线、面。既然只是属性上的差异,那么是否可以通过修改这些信息来实现各种软件绘图风格之间的转换呢?答案是肯定的。比如这是高赞的回答@冯玉珊使用Python/matplotlib绘制的一张图:我们使用Matlab的默认属性来绘制,效果是这样的(无误差线):然后,修改位置即可,size,andcolor等信息,可以得到一张风格相似(无误差线)的图:当我们用这个想法去思考如何画插画的时候,很容易实现自己的小想法,模仿甚至创作理想的插图。比如有一天,我发现傍晚的天空颜色很美,我就想:为什么我不能把它画在论文的插图里呢?(参见:Matlab纸图配色2—自然渐变)那么,再举个例子,有一天,我看到一张女朋友的照片,觉得很美,心想:为什么我不能把她画在纸插图?(参见:Matlab纸图配色1——女朋友的颜色)那么,这个时候,有朋友会说:“哦,答主,你有那么多花里胡哨的东西,难道你不用写一行代码吗?”敲出来太麻烦了。”这个说法不好,就像R有ggplot2,Python有matplotlib,Matlab其实有很多现成的绘图工具包,不需要自己开发,比如PierreMorel[1]结合ggplot2,开发的用于绘制复杂图形的gramm工具。受ggplot2(Wickham2009)、“图形语法”原则的R实现(Wilkinson1999)的启发,gramm改进了Matlab的绘图功能,允许使用高级面向对象代码生成复杂图形.示例效果如下:StephenCobeldick[2]将matplotlib配色方案移植到Matlab中。换句话说,你可以直接在Matlab中使用matplotlib配色方案,这样你就不用一直‘jet’了。移植到MATLAB的MatPlotLib2.0默认颜色图。此提交还包括LineColorOrder颜色图!样例效果如下:还有很多专门针对纸质插画的工具包,这里就不一一介绍了。总的来说,工具就是工具,没有高低之分。想要画出好看的插画,关键在于使用工具的人。专注于一点并到达顶部。参考资料:MorelP.Gramm:Matlab绘图语法。CobeldickS.MatPlotLib感知均匀色图。