元峰 · 2020年06月12日

简单好用的深度学习论文绘图专用工具包--Science Plot

惊闻昨天美国封禁了哈工大、哈工程两所高校的 Matlab 使用权,很多人担忧禁用范围会进一步扩大到我国多所高校。Matlab在科研仿真,以及绘图上是一个非常方便的工具,如果一旦禁用,是不是我们就不好绘制出好看的科研图表了呢。非也,今天我们一起欣赏一个开源的、非常炫酷的 matolotlib 风格的绘图库。
来源:AIZOO

对于一篇优质的论文而言,除了好的idea之外,好的绘图可以给人眼前一亮的感觉,让审稿人和读者一下子就可以记住你的论文和实验结果,为论文接收和被他人引用创造机会。许多科研工作者大部分都是有好的idea,也有好的实验结果,但是在表达和汇总自己的实验结果方面就显得力不从心,因此经常会有作者收到review之后疯狂质疑审稿人到底有没有读过自己的文章.。。。

image.png

不得不说随着顶会投稿数量的爆炸性增长,审稿人力不从心,使得一部分审稿人的水平确实较之前有所降低,但是好的论文配图会增加论文脱颖而出的可能。之前的配图一般使用的是matplotlib,ggplot2,MATLAB等这样的绘图包,然而matplotlib默认设置绘制出来的图总让人感觉没有那么专业,ggplot2的图确实优美但是R语言又比较小众,MATLAB...(因为川建国同志,可能以后我们就不能用MATLAB绘图发表论文了)。在这种情况下,SciencePlots就是非常好的一个选择。

SciencePlots是一个专门为科研论文打造的轻量化的绘图工具包,安装SciencePlots最简单的方式是使用pip,使用的指令为:

安装最新版

pip install git+https://github.com/garrettj40...

安装稳定版

pip install SciencePlots

安装完成后,使用SciencePlots也非常简单,只需要导入matplotlib工具包,选择相应的style即可。例如,如果想要给Science投稿,那么只需要引入下列的主题:

import matplotlib.pyplot as plt
plt.style.use('science')

需要使用IEEE的格式,则是

import matplotlib.pyplot as plt
plt.style.use(['science','ieee'])

但是需要注意的是,IEEE的格式会覆盖一些Science的风格,例如列宽,行距等。

接下来,用一些例子来展示一下SciencePlots的用法和具体的效果,首先,引入一些初始的数据并进行绘制。


import numpy as np
import matplotlib.pyplot as plt
def model(x, p): 
   return x ** (2 * p + 1) / (1 + x ** (2 * p))
x = np.linspace(0.75, 1.25, 201)

如果不使用SciencePlots,使用matplotlib的绘制代码:

fig, ax = plt.subplots()
for p in [10, 15, 20, 30, 50, 100]:      
    ax.plot(x, model(x, p), label=p)
ax.legend(title='Order')
ax.set(xlabel='Voltage (mV)')
ax.set(ylabel='Current ($\mu$A)')
ax.autoscale(tight=True)
fig.savefig('fig1.jpg', dpi=300)

绘制结果如下:

image.png

无论是形状,字体看上去都并不专业。如果我们稍加改造,使用SciencePlots中Science的提交格式,上面的图片就会变为:

image.png

无论是坐标轴的刻度线,字体都变得高大上了很多。具体的做法也非常简单,只需要一行简单的with语句就可以完成字体,坐标轴,图例等诸多任务,代码为:

with plt.style.context(['science']):
    fig, ax = plt.subplots()        
    for p in [10, 15, 20, 30, 50, 100]:               
        ax.plot(x, model(x, p), label=p)        
    ax.legend(title='Order')        
    ax.set(xlabel='Voltage (mV)')        
    ax.set(ylabel='Current ($\mu$A)')        
    ax.autoscale(tight=True)        
    fig.savefig('figures/fig1.pdf')        
    fig.savefig('figures/fig1.jpg', dpi=300)

OK,SCI中了,现在我们需要投个CVPR什么的了。IEEE要求黑白印刷出来的文章也需要能够区分颜色。之前我们还需要查IEEE颜色表什么的,但是现在,类似的,我们只需要修改一下with语句,就可以得到IEEE样式的:

with plt.style.context(['science', 'ieee']):
    fig, ax = plt.subplots()    
    for p in [10, 20, 50]:       
       ax.plot(x, model(x, p), label=p)    
       ax.legend(title='Order')    
    ax.set(xlabel='Voltage (mV)')    
    ax.set(ylabel='Current ($\mu$A)')    
    ax.autoscale(tight=True)    
    fig.savefig('figures/fig2.pdf')    
    fig.savefig('figures/fig2.jpg', dpi=300)

图片的效果则变为了:

image.png

除了二维的线图(line plot),散点图同样可以绘制:

with plt.style.context(['science', 'scatter']):    
    fig, ax = plt.subplots(figsize=(4,4))    
    ax.plot([-2, 2], [-2, 2], 'k--')    
    ax.fill_between([-2, 2], [-2.2, 1.8], [-1.8, 2.2], color='dodgerblue', alpha=0.2, lw=0)    
    for i in range(7):        
        x1 = np.random.normal(0, 0.5, 10)        
        y1 = x1 + np.random.normal(0, 0.2, 10)        
        ax.plot(x1, y1, label=r"$^\#${}".format(i+1))    
        ax.legend(title='Sample', loc=2)    
        ax.set_xlabel(r"$\log_{10}\left(\frac{L_\mathrm{IR}}{\mathrm{L}_\odot}\right)$")    
        ax.set_ylabel(r"$\log_{10}\left(\frac{L_\mathrm{6.2}}{\mathrm{L}_\odot}\right)$")    
        ax.set_xlim([-2, 2])    
        ax.set_ylim([-2, 2])    
        fig.savefig('figures/fig3.pdf')    
        fig.savefig('figures/fig3.jpg', dpi=300)  

图片结果如下:

image.png

除了不同样式,不同杂志之外,SciencePlots同样提供了不同风格的配色方案,高对比度(high-vis)风格。

image.png

颜色明快(bright)风格:

image.png

活泼配色(vibrant)风格:

image.png

没那么花哨(muted)的风格:

image.png

复古(retro)的风格:

image.png

最有意思的是,不知道是不是怕从Apple Store下架,SciencePlots还加了一个黑色模式(dark\_background)。

image.png

想要了解更多有关SciencePlots的内容,可以去SciencePlots的官方Github了解更多。

Github链接附上: https://github.com/garrettj40...



相关文章

关于作者

我是元峰,互联网+AI领域的创业者,欢迎在微信搜索“AIZOO”关注我们的公众号AIZOO。

如果您是有算法需求,例如目标检测、人脸识别、缺陷检测、行人检测的算法需求,欢迎添加我们的微信号AIZOOTech与我们交流,我们团队是一群算法工程师的创业团队,会以高效、稳定、高性价比的产品满足您的需求。

如果您是算法或者开发工程师,也可以添加我们的微信号AIXZOOTech,请备注学校or公司名称-研究方向-昵称,例如“西电-图像算法-元峰”,元峰会拉您进我们的算法交流群,一起交流算法和开发的知识,以及对接项目。

WX20200219-104846.png

关注元峰微信号“AIZOOTech”

更多算法模型相关请关注AIZOO专栏
推荐阅读
关注数
227
内容数
48
AIZOO.com 致力于搭建AI开发者、AI公司与需求方的桥梁,打造中国最大的算法和产品商城。传播AI领域资讯和技术,展示AI算法和产品。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息