最近,一些公众号推送一款由哈佛博士生写的论文绘图神器。该项目地址是项目地址。 简单来说,它是一个基于Matplotlib的补充包,里面主要包含了一些以.mplstyle
为后缀的图表样式的配置文件。这样,你画图的时候只需要通过调用这些配置文件,就能画出比较好看的数据可视化图表,也避免了你每次画图时都要从头开始手动配置图表的格式。 目前该工具包中包含有Science,IEEE
等期刊的图表格式,还包括一些对图表中的网格和字体颜色等的配置文件。 但目前好像只支持折线图和散点图的作图,暂时不支持柱状图或者箱型图等其他类型的图表。
安装方式
用pip install
的方式安装。已经装有Anaconda的同学,可以打开anaconda下的Anaconda Prompt终端,敲入如下命令即可:
# for latest version
pip install git+https://github.com/garrettj403/SciencePlots.git
# for last release
pip install SciencePlots
推荐第一种安装方法,因为第一种可以保证你下载到的是最新的工具包,里面包含有最新的配置文件。
SciencePlots中的主要内容
该工具包中大概由以下几种类型的配置文件组成:
1. 主题类型: Science,IEEE以及scatter(散点图)类型。这类配置文件主要是对
图片的大小、分辨率、字体的大小和种类、折线的类型和marker的大小形状等的配置。
2. 颜色类型: bright, high-vis等风格。改变图表中的曲线颜色。
3. 网格类型: grid. 如果你希望你的图表中有网格,导入它即可。
4. 其他类型: 该工具包还有一些其他配置文件,对它们的功能暂时不太了解。
使用方式
使用这个工具包的方式大致有两种:
#第一种
import matplotlib.pyplot as plt
plt.style.use('science') #这里表示使用Science风格的配置文件
这种方式会让你当前脚本内编写的所有图表都是统一的Science。但是我在使用这种方式的时候,会出现bug,画出的图表的大小比例明显就有问题。
因此,就推荐使用下面这种方式:
#第二种
with plt.style.context(['ieee','grid']):
x = np.linspace(0.0,2.0)
y = np.sin(x)
plt.plot(x,y,label = "Line1")
plt.plot(x,2*y, label = "Line2")
plt.plot(x,3*y, label = "Line3")
plt.plot(x,4*y, label = "Line4")
plt.plot(x,2.2*y, label = "Line5")
plt.autoscale(tight = True)
plt.legend(title = 'Order', edgecolor = 'k')
plt.show()
这样就能保证只有在with
语句下面的图表会采用ieee, grid
的风格。这样,你就可以在一个脚本里画出多个不同风格的图表。
效果展示
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
print(matplotlib.get_configdir())
#plt.style.use('science')
plt.figure()
with plt.style.context(['ieee','grid']):
x = np.linspace(0.0,2.0)
y = np.sin(x)
plt.plot(x,y,label = "Line1")
plt.plot(x,2*y, label = "Line2")
plt.plot(x,3*y, label = "Line3")
plt.plot(x,4*y, label = "Line4")
plt.plot(x,2.2*y, label = "Line5")
plt.autoscale(tight = True)
plt.legend(title = 'Order', edgecolor = 'k')
plt.show()
效果如下图所示:
可以看到在上述源代码中,并没有显示地对每条曲线的样式进行配置。因为这些样式都已经定义在了ieee.mplstyle, grid.mplstyle
配置文件中。
那其实,细心的同学可以看到Line1
和Line5
的曲线样式是重复的。至于为什么会这样的原因,我们可以去查看这些mplstyle
文件的具体配置内容。要获取这些配置文件在电脑上的路径,可以用下述方式找到:
import matplotlib
print(matplotlib.get_configdir())
这样就能打印出文件所在的路径。那在我电脑上,该路径为:
可以看到该工具包中的所有*.mplstyle
文件都放在了.matplotlib
的stylelib
文件夹内。因为我们上述代码中用的是ieee
风格,所以我们用记事本打开ieee.mplstyle
文件:
# Matplotlib style for IEEE plots
# This style should work for most two-column journals
# Set color cycle
# Set line style as well for black and white graphs
axes.prop_cycle : (cycler('color', ['k', 'r', 'b', 'g']) + cycler('ls', ['-', '--', ':', '-.']))
# Set default figure size
figure.figsize : 3.3, 2.5
figure.dpi : 600
# Font sizes
font.size : 12
可以看到在第一行,它只定义了四种曲线的样式类型。因此上图中,第五条曲线与第一条曲线的样式重复也就情有可原了。那我们也可以自己更改其中的一些配置,比如此时的font.size
(字体大小)设为12, 效果如上图中所示。现在我们将12
更改为9
, 代码与之前的代码一模一样,来看看效果如何:
可以看出第二幅图表中的字体相较于第一幅图是减小了的。
总结
本文只展示了工具包中部分的样式风格,大家也可以查看该项目中的Examples
来尝试不同风格的组合搭配。此外,由于我们可以随意地修改工具包中的配置文件,因此我们自己也能配置一些你喜欢的个性化的风格样式。之后需要画图表的时候,直接调用即可,方便快捷。