丰富的第三方模块赋予了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 pltfig, 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 matplotlibmatplotlib.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提供了丰富的绘图函数,在后续文章中再详细介绍。
·end·
一个只分享干货的
生信公众号