推荐一个matplotlib的格式神器

写在前面

前一段时间看到有推送说一个哈佛大学的小哥设计了一套适合于sci论文的matplotlib模板,使用这些模板直接可以绘制出sci风格的图表,所以自己试了一下,感觉还不错!

其实我们大多数人写论文的时候都会遇到需要做图的情况,如果使用Python绘制这些图像基本都是绕不开matplotlib这个库的,这个库的名字也是来源于MATLAB语言,这意味着可能用MATLAB绘制图像也是这个风格的,距离科研论文的图像总是觉得差了些什么。而origin、SPSS这些软件需要购买,破解软件装起来也麻烦,而且软件本身很重,用于普通的做图总是觉得会有一些麻烦。

B站上面的一个博主“毕导”有一期视频讲如何写毕业论文的时候说过这么一句话,论文的图像的审美标准只有一个字——丑。而我们使用matplotlib绘图时,虽然已经很丑了,但是还是丑的差了点什么。这个模板就可以很有效的节省我们“美化”图片时的调整时间。

7.png

闲话少说开始今天的正文。

安装

方法一

首先这个项目已经开源到github上面了,地址是这里,里面详细介绍了如何装这个库以及如何使用。安装其实很简单哈,就是一行命令就可以了:

pip install git+https://github.com/garrettj403/SciencePlots.git

但是呢,我没有这么干。为什么呢?因为我们都知道,github最大的特点就是——慢!下载一个东西真的比龟速还要龟速。那有什么解决办法吗,我们中国版的github,码云(注意不是马云)很好的帮我们解决了这个问题。我们只需要在码云里面点击“从github导入仓库

image

然后把刚才复制的连接复制进去点确定就可以自动将github上面的仓库导入到码云上面了

image

之后我们再用git去安装就会快很多

pip install git+你的项目码云地址

方法二

当然上面一种方法是可以的,不过我本人是用的第二种方法:

首先按照上面的步骤,把github上面的仓库导入到码云上。

之后直接git clone 项目码云地址把整个仓库下载下来

然后新建一个python文件,运行下面的代码:

import matplotlib as mpl
print(mpl.get_configdir())

这样就可以看到你的matplotlib目录了,基本上都是当前用户文件夹下的.matplotlib文件夹,比如说Mac用户就是/Users/用户名/.matplotlib

然后打开那个文件夹,你就可以看到这个stylelib文件夹了(如果没有的话就自己新建一个)

image

然后把我们git clone下来的文件夹里面的所有.style,像我这样

image

这样我们就算安装完了

使用

安装完了我们当然是要迫不及待的试一下了!

github的文档里写的很清楚怎么用这个style

你可以这样:

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

也可以这样

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

这个时候我们就可以用官方事例中的一部分来实验一下了:

import numpy as np
from matplotlib import 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)

好的,运行之后,我们回看到这个错误:

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

意思是什么呢?latex找不到。latex在前面的推送中有提到过,这是一种论文的排版语言。当然你一定会想到,那我pip install latex不就行了吗,我自己当然也试过了!可是依然会报这个错误

这个时候我就有一点心态崩了,百度了一下说不是说你的Python没有安装latex,而是你的电脑环境里没有latex。这就很搞笑了,难道我为了画个图还要千辛万苦的安装latex?所以我给这个github写了一个issue说了这个问题

这个作者回复的非常快,不过情况有点尴尬:

image

大概意思就是说,这个问题我已经在FAQ(问答系统)里面回答过了,你能不能先看看啊!这就很尴尬,这件事情告诉我们,给github留言之前,一定要先看看你要问的有没有在FAQ里面已经出现过了,不然很容易被作者骂。

怎么解决这个问题呢?其实很简单,我们在style里面加一个no-latex就可以了,像这样:

import numpy as np
from matplotlib import 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', 'no-latex']):
    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)

执行这个代码,我们就可以顺理成章的拿到我们想要的结果了:

image

是不是特别的SCI!!

我们来对比一下加style和不加的区别:


image

我们可以看到变化是非常明显的,首先最明显的区别在于字体,这个style将字体设置为了论文中常用的Times New Roman,并且字号有了很大的提高,并且进行了加粗。
在图形这边,首先线条的颜色饱和度变得更高了,而且添加了横纵坐标的刻度。总理来说,非常符合论文图标的审美哈哈哈,就是那种,画出来就很SCI的感觉

注意事项

在使用matplotlib时我们经常需要使用中文,但是很遗憾哈,因为这个style是配置好了字体的,所以我们不能再自己去配置中文字体了。所以这个还是比较适合发英文论文的哈

写在最后

Python目前已经成为了一种比较常用的数据分析工具,这些style其实看起来没有那么高级,只是帮我们做了调节图像颜色配置等等的工作,真正的重点还是我们怎么去总计分析数据,如何去绘图,而调整图表只是数据分析中的一小部分罢了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。