Python绘图之Matplotlib绘图基础
本文最后更新于:24 天前
1. 引言
Matplotlib 是一个非常强大的 Python 绘图工具库。
我们先看一个简单的例子:
1 |
|
运行代码,我们就可以看到图1所示结果:
2. Matplotlib 使用与设置
通过上面的例子,我们可以使用 Matplotlib 很快地绘制出一个数据图;但是,只使用 Matplotlib 中默认的设置绘制出来的图,往往不适合直接放在文章中。因此,我们需要进行一些设置,对数据图美化,使图中的字体、颜色、大小、样式符合我们的要求。
2.1 导入 Matplotlib 库
使用以下代码即可导入 Matplotlib 库:
1 |
|
2.2 全局字体样式设置
通常在一片文章中,我们需要绘制多个数据图,并且图中所使用的字体应该是统一,通常图中元素的字体格式都需要单独设置,十分不方便。因此,我们需要进行全局设置,这样只通过一次设置,就可以统一图中所有元素的字体格式。具体代码如下:
1 |
|
下面将详细介绍每一行代码的意思:
-
1-6行表示定义一个字典类型的变量
config
来记录我们的字体格式。 -
第2行表示设定字体族
font.family
为serif
,serif
代表的是有衬线字体族
,其典型代表为 Times New Roman 字体。font.family
可以设置为以下值:serif
(典型代表:Times New Roman 等),sans-serif
(典型代表:Arial、Helvetica 等),cursive
(典型代表:Zapf-Chancery 等),fantasy
(典型代表:Western 等),monospace
(典型代表:Courier 等)。
- 通常文章中一般常用的字体族为
serif
有衬线字体族 和sans-serif
无衬线字体族。
-
第3行表示指定使用字体族中某一具体字体,其键值根据第2行设置(例如,第2行若为
"font.family": 'sans-serif'
,则需将"font.serif"
改为"font.sans-serif"
)。可以同时指定多个字体,但只有在本地字体库中存在的字体的第一个有效(例如,第一个字体在本地电脑上存在,则只有第一个有效,若第一个不存在,则匹配第二个;若第二个存在就使用第二个,若还是不存在,则匹配第三个;以此类推…)。各字体族默认字体如下:
font.serif
: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, seriffont.sans-serif
: DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-seriffont.cursive
: Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursivefont.fantasy
: Comic Neue, Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasyfont.monospace
: DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace
- 通常按照各个期刊的要求选择特定字体即可。
-
第4行表示设置字体大小。
-
第5行表示设置数学公式的字体,Matplotlib 中可以使用 Latex 编辑输入数学公式。
mathtext.fontset
包含5种字体:dejavusans
(默认字体),dejavuserif
,cm
(Computer Modern),stix
,stixsans
。- 一般我们选择
stix
和stixsans
。stix
是有衬线的,与 Times New Roman 相似;stixsans
是无衬线的,与 Arial 相似。
- 一般我们选择
-
第7行表示使用该全局设置并使其生效。
2.3 坐标轴样式设置
坐标轴设置通常包括 坐标轴刻度间隔、坐标轴刻度标签、坐标轴起止点、坐标轴名称等。接下来将介绍坐标轴的一些基本设置,更高级的用法设置(例如:指数对数坐标、缩放部分坐标轴等)会在以后的文章中详细介绍。
-
设置坐标轴名称
1
2
3xylabel_fontdict = {'size': 15, 'color': 'k', 'family': 'Times New Roman'}
plt.xlabel('Step', fontdict=xylabel_fontdict)
plt.ylabel('$E_{f}^{prediction}$ (eV/atom)', fontdict=xylabel_fontdict)设置坐标轴名称很简单,只要使用
plt.xlabel
和plt.ylabel
即可。- 通过
fontdict
参数可以对 坐标轴名称 的字体样式再次进行设置。 - 第3行中用
$
括起来的部分表示使用 Latex 数学公式。
- 通过
-
设置坐标轴刻度
1
2plt.xticks(ticks=[1, 2, 3, 4, 5], labels=['X', 'Y', 'Z', '$\Gamma$', 'X'])
plt.yticks(ticks=np.arange(0, 51, 10))通过使用
plt.xticks
和plt.yticks
可以设置坐标轴的刻度以及标签。 -
设置坐标轴的起止位置
通常设置完坐标轴刻度,Matplotlib会在设置的范围上下增加一定的空白,使数据点不会处于坐标轴上,但是在科研绘图的时候我们却不需要这样的设置。因此,我们需要强制制定坐标轴的起止位置。1
2plt.xlim(xmin=1, xmax=5)
plt.ylim(ymin=0, ymax=50)通过使用
plt.xlim
和plt.ylim
可以设置坐标轴的起止范围。如有需要,也可以只设置最大值
和最小值
中的一个,例如:1
2plt.xlim(xmax=5)
plt.ylim(ymin=0) -
设置坐标轴刻度间隔
有时候我们的数据很多,可能不方便甚至无法使用ticks
来设置坐标轴的间隔。但是为了使图更美观,可能就需要强制设置坐标轴刻度的间隔。1
2
3
4from matplotlib.pyplot import MultipleLocator
plt.gca().xaxis.set_major_locator(MultipleLocator(2))
plt.gca().yaxis.set_major_locator(MultipleLocator(1))注意:需要先导入
from matplotlib.pyplot import MultipleLocator
。
2.4 标题的设置
通常在文章中我们不需要设置图的标题,但是我们在PPT或者其它地方展示数据时,有时候会需要有标题,这样我们就可以通过设置直接加上图的标题(当然也可以后期在PPT中添加)。
1 |
|
添加标题很简单,就一行代码。同样,我们也可以使用 fontdict
参数对标题的字体样式进行单独设置。
3. 结果
我们将上述设置代码整合在一起,看看设置之后的图与图1的差别。
1 |
|
执行代码,得到图2。
我们可以看到:
- 第22行代码,我们设置的y轴间隔是2;但是通过第26行,我们强制将y轴间隔改为了0.5。
- 通过第24行,我们可以看到,设置坐标轴起止位置的效果。(虽然有数据点在边框上只显示了一半,但是可以通过设置,使其显示完整,这会在后续文章中进行讲解。)
4. 总结
以上就是Matplotlib的一些基础用法和设置,后续会给大家详细介绍常用的一些数据图及其变种的绘图方法。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明来自G.J. Cheng’s Blog!