图件配置
1. 绘图风格
plt.style.use('classic')
plt.style.use('seaborn-whitegrid')
默认风格
FiveThirtyEight风格
ggplot风格
bmh风格
黑色背景风格
灰度风格
Seaborn风格
2. 配置图例、颜色条
对于图例 plt.legend()
函数(或 ax.legend()
函数):
参数 | 作用 | 示例 |
---|---|---|
loc | 设置图例位置 | ![]() |
frameon | 是否显示外边框 | ![]() |
ncol | 图例的标签列数 | ![]() |
fancybox | 是否设置圆角边框 | ![]() |
framealpha | 设置外边框透明度 | ![]() |
shadow | 是否设置边框阴影 | ![]() |
borderpad | 设置文字间距 | ![]() |
选择图例显示的元素:
将需要显示的线条传入
plt.legend()
。通过plt.plot()
函数可一次性创建多条线,返回线条实例列表。故可通过该列表的索引传入。只为需要在图例中显示的线条设置标签。默认情况下,图例会忽略那些不带标签的元素。
同时显示多个图例
通过标准的
legend()
接口只能为一张图创建一个图例,如果想用其创建第二个图例,那么第一个图例就会被覆盖;可以通过从头开始创建一个新的图例艺术家对象(legend artist),然后用底层的
ax.add_artist()
方法在图上添加第二个图例。
在 Matplotlib 里同,颜色条是一个独立的坐标轴,可以指明图形中颜色的含义。由于颜色条本身可看作是一个 plt.Axes
实例,因此所有关于坐标轴和刻度值的格式配置技巧等都可以派上用场。
通过 plt.colorbar()
函数可以直接创建最简单的颜色条。
可以设置
cmap
参数更改配色方案,如cmp='gray'
。所有可用的配色方案都在plt.cm
命名空间里,在 IPython 里通过 Tab 键就可以查看所有的配置方案。可以缩短颜色取值的上下限,对于超出上下限的数据,通过
extend
参数可用三角箭头表示比上限大的数或者比下限小的数。
使用 plt.cm.get_cmap()
函数设置离散数据的离散型颜色条。
3. 坐标轴刻度自定义
Matplotlib 的目标是用 Python 对象表现任意图形元素,例如,figure
对象其实就是一个盛放图形元素的包围盒。可以将每个 Matplotlib 对象看成是子对象的容器,例如每个 figure
都会包含一个或多个 axes
对象,每个 axes
对象又会包含其他表示图形内容的对象。
同上,坐标轴刻度线也不例外。每个 axes
都有 xaxis
和 yaxis
属性,每个属性同样包含构成坐标轴的线条、刻度和标签的全部属性。
坐标轴定位器(locator)、格式生成器(formatter):

4. 文字与注释
可以通过plt.text()
或ax.txt()
手动添加注释,它们可以在具体的 x/y 坐标点上放上文字。(ha 是水平对齐方式(horizonal alignment)的缩写):


任何图形显示框架都需要一些变换坐标系的机制,即坐标变换:

transData
坐标用 x 轴与 y 轴的标签作为数据坐标;transAxes
坐标以坐标轴左下角的位置为原点,按坐标轴尺寸的比例呈现坐标;transFigure
以图形左下角的位置为原点,按图形尺寸的比例呈现坐标。由此,假如你改变了坐标轴上下限,只有
transData
坐标会受影响,其他坐标系都不产生变化:代码 图片
5. 多子图
创建数据图的函数主要有:
plt.figure
plt.axes
plt.subplot
plt.subplots
Figure.subplots
Figure.add_subplot
用 plt.axes()
手动创建子图:
plt.axes()
函数有一个可选参数,由图形坐标系统的四个值构成,这四个值分别表示图形坐标系统的[bottom, left, width, width]
(底坐标,左坐标,宽度,高度),数值的取值范围是左下角(原点)为 0,右上角为 1。ax1 = plt.axes() # 默认坐标轴 ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])
面向对象画图接口中类似的命令有
fig.add_axes()
:fig = plt.figure() ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4], xticklabels=[], ylim=(-1.2, 1.2)) ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4], ylim=(-1.2, 1.2)) x = np.linspace(0, 10) ax1.plot(np.sin(x)) ax2.plot(np.cos(x))
用 plt.subplot()
创建简易网格子图——
该函数有三个整型参数——将要创建的网格子图行数、列数和索引值,索引值从 1 开始,从左上角到右下角依次增大。
同时可用
plt.subplots_adjust()
函数(或面向对象接口的fig.add_subplot()
)调整子图之间的间隔(用hsapce
与wspace
参数设置与图形高度与宽度一致的子图间距,数值以子图的的尺寸为单位,本例中间距是子图宽度与高度的 40%):
函数 plt.subplots()
用一行代码创建网格
这个函数不是用来创建单个子图的,而是用一行代码创建多个子图,其返回值为一个元组
(fig, ax)
:fig
:一个 Figure 对象ax
:一个 Axes 对象组成的数组
关键参数是行数与列数,以及可选参数
sharex
与sharey
,通过它们可以设置不同子图之间的关联关系(设置sharex
与sharey
参数之后,就会自动去掉网格内部子图的标签,让图形看起来更整洁):示例 因为函数
plt.subplots()
返回值为数组,故其与 Python 索引从 0 开始的习惯保持一致。
用 plt.GridSpec()
函数实现不规则的子图排列方式(函数 plt.GridSpec()
本身不能直接创建一个图形,它只是 plt.subplot()命令可以识别的简易接口):


5. Matplotlib 自定义:配置文件与样式表
样式表:
通过
plt.style.available
命令可以看到所有可用的风格。使用某种样式表的基本方法如下所示:
plt.style.use('stylename')
直接使用上述代码会影响后面所有的风格,如果只想局部使用,可以使用上下文管理器:
with plt.style.context('stylename'): make_a_plot()
修改默认配置:rcParams
。