锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

如何在科研论文中画出漂亮的插图?

时间:2022-10-12 07:30:01 63a传感器

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达  

本文转自极市平台

方法一

作者|冯昱尧

https://www.zhihu.com/question/21664179/answer/18928725

强烈推荐 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 还可以话 xkcd 风格的图呦~

(图片引用自网络)

此外结合 IPython Notebook 更多精彩内容,请看http://nbviewer.ipython.org/

如果安装麻烦,恰好是 Windows 可以在系统下尝试Python发行版winpython - Portable Scientific Python 2/3 32/64bit Distribution for Windows。

鉴于@van li同学质疑 matplotlib 我在这里用标题中的图像来画标题中显示的图像吗? matplotlib 画出来如下:

代码在这里:

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

代码在这里:

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

看到楼下有人说配色好看,唉...那我也贴几个吧...只不过当初限于篇幅没有写而已。

首先,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/seaborn) 是一个调用 matplotlib 上图:

代码一行,后面几乎都是一行,没有其他设置,默认情况。我不会发布其他代码:

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

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

---

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

一些盆友在评论中说,他们希望有一个完整的教程。事实上,就这个答案而言,离实际使用还有很长的路要走,网上相关的中文资料也不多。然而,如果你真的想写这个答案,你就不能假装它。此外,在这个问题下写作也不是很合适。等到那天我有了专栏,我可以写一系列关于可视化的教程。

方法二

作者|阿昆

https://www.zhihu.com/question/21664179/answer/1182984311

翻看这个问题下的所有答案,发现所有提到的答案Matlab其评价中常有锯齿、菜鸟、丑、不忍直视等标签

然而,在解决了一些基本问题后,2020年一些基本问题得到解决时,Matlab还那么‘不堪’吗?

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

既然只是属性的不同,只要修改这些信息,就能实现各种软件绘图风格的转换吗?

答案是肯定的。

例如,这是一个高赞的答案@冯昱尧用Python/matplotlib一幅画:

我们用Matlab默认属性绘制,效果如下(无误差棒)

然后,只需再修改一下位置、尺寸、颜色等信息,就可以得到风格差不多的图(没加误差棒):

当我们用这一思想来思考该如何绘制插图时,就很容易实现自己的小想法,仿造甚至创造出理想的插图。

比如,某一天,发现傍晚的天空颜色很美,心想:为什么不能把它画到论文插图里呢?(见:Matlab论文插图配色2——自然渐变)

于是,

再比如,某一天,看到女朋友的照片,觉得很美,心想:为什么不能把她画到论文插图里呢?(见:Matlab论文插图配色1——是女朋友的颜色)

于是,

这时,有朋友就要说了:“哎呀答主,你整这些个花里花哨的东西,还不是得一行代码一行代码的敲出来啊,太麻烦了吧。”

此言差矣。

就像R有ggplot2,Python有matplotlib,Matlab其实也有很多现成的绘图工具包,并不需要你自己开发。

比如,

Pierre Morel [1] 结合ggplot2,开发了gramm工具,用于绘制复杂图形。

Inspired by ggplot2 (Wickham 2009), the R implementation of “grammar of graphics” principles (Wilkinson 1999), gramm improves Matlab’s plotting functionality, allowing to generate complex figures using high-level object-oriented code.

示例效果如下:

类似的,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!

示例效果如下:

还有很多专门针对论文插图的工具包,这里就不一一介绍了。

总的来说,工具只是工具,它们并没有高低贵贱之分。

若想画出好看的插图,关键还是在于使用工具的人

集中一点,登峰造极。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章