还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!

在使用Matplotlib的时候,一开始并不懂得美化,修改style,设置dpi…都是小打小闹,发现绘制的曲线图跟论文中的相差很远。Word、PPT、Visio、Origin、SigmaPlot都能做出比较好看的配图,但是懒得学,目前还用不到这么专业的绘图工具。对于刚上手的小白来说,反而简单易上手,不那么“专业”的开源工具包是相对更好的选择。本文就介绍一个近期更新的SCI/IEEE论文绘图工具——SciencePlots。刚开源一个月,目前还在维护中,现在主要功能集中在曲线图散点图绘制。


文章目录

  • 1. 风格效果
  • 2. 安装配置
    • 2.1 通用配置
    • 2.2 win10 配置
    • 2.3 Linux 配置
  • 3. 食用方法
  • 4. 仓库地址
  • 5. 测试代码


系统环境:

- windows10
- python-3.7.6
- jupyter notebook

作者发表的论文使用该工具配图:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第1张图片

1. 风格效果

先看疗效,能(man)治(zu)病(xu)再(qiu)看;治不了就不用看了,以免浪费时间。

Science的风格效果1:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第2张图片


Science的风格效果2:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第3张图片


Science的风格效果3:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第4张图片


Science的风格效果4:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第5张图片


Science的风格效果5:(有点Yolo主页的风格…)
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第6张图片


Science的风格效果6:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第7张图片


IEEE效果1:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第8张图片


2. 安装配置

2.1 通用配置

通过简单的pip安装

# for latest version
pip install git+https://github.com/garrettj403/SciencePlots.git

# for last release
pip install SciencePlots

2.2 win10 配置

因为作者是在linux系统下使用,并且已经配置好了其它依赖,所以对安装的部分介绍较少。
经过一早上的测试,找到了在Win10中使用默认LaTex字体渲染报错的解决方法,并且pull到了该工具仓库的issue,作者稍后会添加到readme。主要原因是LaTeX没有配置好。当然如果不想使用LaTeX渲染,或者认为Latex花费的时间太长,则可以使用以下no-latex样式禁用Latex :

plt.style.use(['science','no-latex'])

下面介绍一下使用LaTeX字体渲染的配置流程。
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第9张图片
如果没配置好LaTeX会遇到以下错误:

RuntimeError: Failed to process string with tex because latex could not be found

尝试了很多方法,发现并不起作用,包括pip tex等等。正确的解决方法是:安装MiKTeX和LaTeX,并将其添加到环境变量

首先下载TeX:http://www.tug.org/。
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第10张图片
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第11张图片
点进去,选择第二个下载
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第12张图片
解压,选择安装:

首先安装 【MiKTeX】:注意选择为所有用户使用;这样会自动添加到系统环境变量;
然后安装【LaTex】:esay!

接下来配置环境变量。人类终究是视觉动物,喜欢有视觉冲击的东西,一张图总结比文字看起来舒服:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第13张图片
注意有两个路径:

D:\APP\MiKTeX\miktex\bin\x64\
D:\APP\TeXstudio\texstudio.exe

其中,第一个是在安装的时候自动创建的,如果选择是为当前用户安装,则该路径在当前用户的环境变量中,需要手动粘过来。
第二个是需要根据自己系统的安装路径确定的。

然后关闭Anaconda的虚拟环境,重新启动一个窗口重新激活,就可以使用了。查看latex:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第14张图片
可以看到已经配置成功了,接下来就可以使用了。


2.3 Linux 配置

暂未测试,不过肯定需要配置latex。有了win10配置方法,在linux配置应该不难。


3. 食用方法

pip安装将自动将所有 *.mplstyle 文件移动到适当的目录中。也可以手动执行此操作。首先,克隆存储库,然后将所有 *.mplstyle 文件复制到Matplotlib样式目录中。直接pip安装就可以使用了,源码方式需要自己配制。

第一种全局使用方式,将以下内容添加到python脚本的顶部:

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

第二种全局使用方式,通过以下方式将多种样式组合在一起:

plt.style.use(['science','ieee'])

注意:在这种情况下,该ieee样式将覆盖主要science样式中的某些参数,以便为IEEE纸配置图表(列宽,字体大小等)。

第三种临时使用方式,使用方法:

with plt.style.context(['science', 'ieee']):
    plt.figure()
    plt.plot(x, y)
    plt.show()

目前该工具支持的风格:
还在为配图美化发愁?这个简单易用的SCI/IEEE论文配图风格化工具值得学习!_第15张图片


4. 仓库地址

https://github.com/garrettj403/SciencePlots


5. 测试代码

""" An example of the 'science' theme. """

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)

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)

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)

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)

with plt.style.context(['science', 'high-vis']):
    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/fig4.pdf')
    fig.savefig('figures/fig4.jpg', dpi=300)

with plt.style.context(['dark_background', 'science', 'high-vis']):
    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/fig5.pdf')
    fig.savefig('figures/fig5.jpg', dpi=300)

with plt.style.context(['science', 'notebook']):
    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/fig10.pdf')
    fig.savefig('figures/fig10.jpg', dpi=300)

# Plot different color cycles 

with plt.style.context(['science', 'bright']):
    fig, ax = plt.subplots()
    for p in [5, 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/fig6.pdf')
    fig.savefig('figures/fig6.jpg', dpi=300)

with plt.style.context(['science', 'vibrant']):
    fig, ax = plt.subplots()
    for p in [5, 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/fig7.pdf')
    fig.savefig('figures/fig7.jpg', dpi=300)

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

with plt.style.context(['science', 'retro']):
    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/fig9.pdf')
    fig.savefig('figures/fig9.jpg', dpi=300)

with plt.style.context(['science', 'grid']):
    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/fig11.pdf')
    fig.savefig('figures/fig11.jpg', dpi=300)

你可能感兴趣的:(论文学习(Paper),深度学习,ieee论文,sci论文,配图美化)