matplotlib简介

时间:2022-07-22
本文章向大家介绍matplotlib简介,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

丰富的第三方模块赋予了python强大的能力,matplotlib作为python最流行的可视化模块之一, 功能强大,用法简便。对于新手而言,其上手难度低,仅需要几行代码就可以创建一个发表质量的图片,而且同时支持静态和动态图片。对于开发者而言,其丰富的子模块提供了对图片中各个细节的精确控制,可以实现高度定制的可视化效果。

在matplotlib创建的图像中,包含了多种元素,示例如下

1. figure

figure是图片的载体,可以看做是画布,图片必须在画布的基础上进行创建

2. axes

axes表示绘图区域或者窗口,用来容纳一张具体的图片。axes位于figure上,同一个figure上可以存在多个axes。

3. axis

axis表示坐标轴,比如常见的x轴,y轴以及对应的刻度线和标签。

4. artist

atrist表示广义的绘图元件,往大了说,figure, axes, axis都属于绘图元件,往小了说,图片标题,图例,刻度,刻度标签等一幅图像上的具体元素都属于绘图元件。

在matplotlib中,有两套绘图语法,第一种是官方推荐的语法,是一种基于面向对象风格的语法,基本用法如下

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [1, 2, 3, 4])

首先通过plt.subplots创建一个figure和axes对象,然后通过axes对象的各种方法来创建图表,上述代码的输出结果如下

这种写法看上去非常的死板,但是在生成复杂图表时,更加的灵活。对于简单的图表,也支持以下写法

plt.plot([1, 2, 3, 4], [1, 2, 3, 4])

上述代码生成的图片和之前的代码是一致的,只不过这里不再需要显示的声明一个figrue和axes对象,而是直接通过matplotlib.pyplot模块来创建简单图表,从代码量来看,更加的简洁。

在matplotlib.pyplot子模块中,实现了matplotlib.axes对象的各种方法,而且隐式的创建了figure和axes对象,调用更加的简单,对于一幅简单图表而言,使用matplotlib.pyplot会带来代码量的简化。

在R语言中,首先需要创建一个图形设备,比如png或者pdf, 绘图代码执行完毕之后,将对应的结果输出到绘图设备,然后保存。在matplotlib中,对应的顺序进行了调整,先执行绘图代码,然后将结果输出到对应的绘图设备,在这里,绘图设备称之为backend。

同样的一段绘图代码,在输出图像时可能输出到png, pdf等各种不同的设备上。对于不同的绘图设备,matplotlib内置了输出代码,作为使用者的我们,不用关系具体的实现过程,只需要根据自己的需求,调整对应的backend即可。

backend可以分为两类:

1. 交互式设备,比如qt,wxpython等GUI窗口

2. 非交互式设备,比如png, jpeg, pdf等各种格式的文件

matplotlib支持的交互式设备列表如下

非交互式设备列表如下

matplotlib模块有内置的backend, 当然也允许我们进行修改,修改的方式有多种,第一种是修改matplotlib的配置文件matplotlibrc, 通过以下代码可以找到该配置文件的位置

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

然后在该文件中,修改backend选项的值。第二种是设置环境变量,MPLBACKEND, 在linux系统的修改方式如下

export  MPLBACKEND='agg'

第三种是在绘图脚本的开头进行设置,代码如下

import matplotlib
matplotlib.use('agg')

上述3种方式,优先级依次递增。对于交互式图形设备,绘图代码执行完毕之后,运行以下代码来弹出对应的结果

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3,4], [1, 2, 3, 4])
[<matplotlib.lines.Line2D object at 0x0AB61130>]
>>> plt.show()

对于非交互式的图形设备,绘图代码执行完毕之后,我们需要通过如下语句,将结果保存到文件中

>>> plt.plot([1,2,3,4], [1, 2, 3, 4])
[<matplotlib.lines.Line2D object at 0x0A9972B0>]
>>> plt.savefig('out.png')

matplotlib提供了丰富的绘图函数,在后续文章中再详细介绍。