中设置colorbar_【值得收藏】如何画出学术论文中需要的各种精美插图,看这一篇就够了!...

本文整理自知乎问答,仅用于学术分享,著作权归作者所有。如有侵权,请联系后台作删文处理。

方法一

作者|冯昱尧

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

强烈推荐 Python 的绘图模块 matplotlib: python plotting 。画出来的图真的是高端大气上档次,低调奢华有内涵~ 适用于从 2D 到 3D,从标量到矢量的各种绘图。能够保存成从 eps, pdf 到 svg, png, jpg 的多种格式。并且 Matplotlib 的绘图函数基本上都与 Matlab 的绘图函数名字都差不多,迁移的学习成本比较低。开源免费。如图所示(以下图片均引用自 Thumbnail gallery):

像这种普通的函数图象:

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

ea2d4e3f3119874998ec0c6c85e12c65.png

b7d7863f56e36a295ba6abef214b982f.png

以及这种 Scatter 图(中文不知道该怎么说…):

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

精致的曲线,半透明的配色。都显出你那高贵冷艳的X格,最重要的是只需一行代码就能搞定。从此以后再也不用忍受 Matlab以及GNUPlot 中那蛋疼的配色了。

想画 3D 数据?没有问题 (不过用 mayavi 可能更方便一些):

c60d15be9ca80d18f0fcf5636a4f63fd.png
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)

四行代码你就能拥有(后三行是画坐标平面上的等高线,严格的说还是一行)。

除此以外,不过你是矢量场,网络还是什么奇葩的需求都能够搞定:

4826c3e856c22be2c72d4fe10b07e8a2.png
plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap=plt.cm.autumn)plt.colorbar()
fdaf49d911fcf44fc61bf0b6256f4cdb.png
plt.triplot(x, y, triangles, 'go-')plt.title('triplot of user-specified triangulation')plt.xlabel('Longitude (degrees)')plt.ylabel('Latitude (degrees)')
84fe4b6b8de7d333d32f31f6091db9d6.png
ax = plt.subplot(111, polar=True)bars = ax.bar(theta, radii, width=width, bottom=0.0)

这还没完,Matplotlib 还支持Latex公式的插入,当别人画的图还是这个样子的时候(以下图片引用自Matplotlib Tutorial(译))

808dd2a4dc9e4e16834edb4c568fff97.png

你能够把它变成这个样子:

c9ca4dea1d0e0639d8db27813fa4cca3.png

如果再搭配上 IPython 作为运行终端(这张图是自己的~):

da34140e4c08b6d912f03746c330cd96.png

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

心动不如行动,还等什么?

经@许铖同学提醒,再补充一句,matplotlib 还可以画 xkcd 风格的图呦~

6d829c966374888e4eca66b0e09f9c70.png

(图片引用自网络)

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

如果嫌安装麻烦并且恰好在 Windows 系统下的话可以尝试Python的一个发行版winpython - Portable Scientific Python 2/3 32/64bit Distribution for Windows。

鉴于@van li同学质疑 matplotlib 是否能画出题目中所示的图像,我在这里将题目中的图像用 matplotlib 画出来如下:

fa64a3a764b5106368255068c4d25090.png

代码在此处:

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

7450db5290e511ed87113e6c51d0e13c.png

代码在此处:

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

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

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


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

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

9caa74dd1c66d2caa431cd538f70e5e0.png
c4a205784462e450fa751574f251d1be.png
f31c3a91fe2ed5db19af667f0517424a.png

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

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

楼下说到统计绘图。嘛 seaborn (https://github.com/mwaskom/seaborn) 是一个调用 matplotlib 的统计绘图库,上图:

ed65285851a9c2221326c02687d3fed7.png

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

g = sns.jointplot(x1, x2, kind="kde", size=7, space=0)
01775f8908dffa3abb0ff01dbe461eac.png
e222d740ce6b97bd6679967aa957535e.png
27fb923362ddb0412dcbd4a23fee1601.png
f34c9474cb170a79525f7b3f5ddcef55.png
c324dc62132d6ee27e232986f1b61ef4.png

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

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还那么‘不堪’吗?

b18cec5a25cc91610ce6e5d55dc23574.png

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

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

答案是肯定的。

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

5c27d66b31cda5ba24323fbbe9763ca6.png

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

c8207039109990fa4606fea36f71a4b8.png

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

544db95135f081c2c7fc77a49cc0b0d5.png

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

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

于是,

8f6fe6a3116205462e5c4d520803660f.png
461ff5821cb2b124401729f96c47c7dc.png

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

于是,

6f4049bf406e476b308778ed409c8878.png

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

此言差矣。

就像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.

示例效果如下:

c0639d93adb894279f0053b69d4d036d.png
c148fdac04f8c79663c6c354a1844255.png
6da6e010a865552cdc103f36601c34f3.png
dec44f9080d9730371e9b934d95e93f8.png
c7d335148feb8a61464811deb6e126f0.png
bf13f7b5e849230d3f76f5031307d970.png
a3a2dd7313e422fde65a1d9c55388b66.png
257ec1424bfd94b1221be46135758e9b.png
53117a270e1844f8b06b194a677ea712.png
a4bbc0b917834a8716cafb2a771ed743.png
de8d5a798f05e2593c2ddbca537d3ca4.png

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

示例效果如下:

56039de849b00c52e568e8a47126aea7.png
fdfc030510a597ae63626e727dd01d8e.png

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

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

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

集中一点,登峰造极。

参考:
Morel P . Gramm: grammar of graphics plotting in Matlab.
Cobeldick S . MatPlotLib Perceptually Uniform Colormaps.

本文由IEEE那些事儿公众号进行整理

3dd5e836f438c4142d4ef73e6406f38c.gif

“交通科研Lab”:分享学习点滴,期待科研交流!

f8e395b922d48fcb4534152e6567adec.png

如果觉得还不错

点这里???

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphQL:Descriptor Attributes

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进&#xff0c…

idea怎么把代码放到git_在IDEA中如何初始化Git,把项目推送到Git上

在IDEA中如何初始化Git,把项目推送到Git上登录Gitee(码云)账号,新建仓库先按如下步骤简单新建一个仓库:创建成功后,会出现下图中所示的原始文件:在IDEA上的Terminal中进行操作注意:可能有些朋友刚打开Termi…

大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍

紧急提醒:还有1天!2020.NET开发者大会就要开幕啦!你都做好参会准备没有?特殊时期,为方便小伙伴们顺利参会,小编特意整理了这篇大会参会攻略,大到各种日程安排、小到签到、出行、防疫等&#xff…

大曾幽默打油诗_这才是真正的幽默打油诗,逗人一笑,又引人深思!

阅读本文前,请您先点击上面的蓝色字体“点点星光”,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享。完全是免费订阅,请放心关注来源:诗词天地大曾 ,曾初良,也乐斋主&#xff0c…

编程去除背景绿幕抠图,基于.NET+OpenCVSharp

摘要:本文介绍了一种使用OpenCVSharp对摄像头中的绿幕视频进行实时“抠人像、替换背景”的方式,对于项目中的算法进行了分析。本文中给出了简化OpenCVSharp中Mat、MatExpr等托管资源释放的方法。本文还介绍了“高效摄像头播放控件”以及和OpenCVSharp的性…

.NET 云原生架构师训练营(模块二 基础巩固 依赖注入)--学习笔记

2.2.1 核心模块--依赖注入什么是依赖注入.NET Core DI 生命周期服务设计服务范围检查ASP.NET Core 依赖注入:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?viewaspnetcore-5.0什么是依赖注入Dependency injection 依赖注入Inv…

vue ref 绑定的事件需要移除吗_Vue易遗忘的基础复习(二)

数据请求Vue-resource请求在Vue2.0之后已经被舍弃2. fetch请求因为传统 Ajax (指 XMLHttpRequest)存在一些令人头疼的问题:配置和调用方式非常混乱,而且基于事件的异步模型写起来也没有现代的 Promise,generator/yield…

如何在 ASP.NET Core 中使用 API 分析器

ASP.NET Core 2.2 引入了 API 分析器,它有利于提高 API 的文档化,API分析器 可以应用在任何带有 ApiController 特性的 Controller 上,本篇就和大家一起讨论下。安装 API 分析器 如果你使用的是 ASP.NET Core 2.2 的话,用 Visual …

.net mysql字符串截取_【MySQL】字符串截取之SUBSTRING_INDEX和【MySQL】字符串四则运算...

substring_index(str,delim,count)str:要处理的字符串delim:分隔符count:计数例子:strwww.google.com1.count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容SELECT SUBSTRING_INDEX(www.google.com,.,1);结果是:wwwSELEC…

用C#+Selenium+ChromeDriver 爬取网页,完美模拟真实的用户浏览行为

背景Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器。这里,我将介绍selenium 谷歌浏览器的一般使…

ASP.NET Core ActionFilter引发的一个EF异常

最近在使用ASP.NET Core的时候出现了一个奇怪的问题。在一个Controller上使用了一个ActionFilter之后经常出现EF报错。InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guarante…

BCVP开发者说第5期:QuartzCore.Blazor

沉静岁月,淡忘流年1项目简介QuartzCore.BlazorQuartzCore.Blazor 是一个基于 .Net5 开发的轻量级 Quartz 作业配置中心,实践应用 Ant Design Blazor 和 FreeSql 两个技术, 对这两个技术感兴趣的小伙伴可以加我一起学习讨论哦,对有…

mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?

本文同步Java知音社区,专注于Java作者:powdbahttps://yq.aliyun.com/articles/694162一、背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?二、测试…

.NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

2.2.2 核心模块--日志ILogger 的使用日志的 ID日志的分类日志的级别LoggerProvider日志的最佳实践.NET Core 和 ASP.NET Core 中的日志记录:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?viewaspnetcore-5.0ILogger 的使用在 Get 方法中添…

mysql数据库设计三大范式_了解数据库设计三大范式

数据库设计范式什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范…

使用BeetleX网关部署第三方Web服务

BeetleX的http/ws网关在早期版本可以启动和管理第三方Web服务进程,在最新的1.5版本中引入了文件管理功能,通过这一功能可以对第三方Web服务进行发布管理。加入文件管理后BeetleX的新版本网关服务可以理解为一个简单化的IIS,但它的不同之处是可…

2020.NET开发者大会大会线上同步直播,以及参会秘籍

2020.NET开发者大会马上就要开幕啦!你都做好参会准备没有?本届峰会线上分享将在思否和CSDN两个媒体平台同步进行,大家可以选择适合自己的方式在线参与互动哦!访问下方链接,可以直接加入直播:思否直播观看地…

C# 9.0中引入的新特性init和record的使用思考

.NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过使用角度来思考这两个特性。initinit是C# 9.0中引…

使用 .NET Core 中的 EventCounters 衡量性能

背景对于每隔几毫秒发生的事件,最好使每个事件的开销较低(小于一毫秒)。 否则,对性能的影响将很大。 记录事件意味着你将向磁盘写入内容。 如果磁盘不够快,你将丢失事件。 你需要一个解决方案,而不是记录事…

基于 C# 的 ETL 大数据并行编程

作者:James Spinella译者:精致码农原文:https://bit.ly/3nGQu4J并行编程在历史上一直是软件开发中比较小众和复杂的环节,往往不值得头疼。但编写并行化应用只会越来越简单,一个应用同时利用设备 CPU 上的多个内核&…