基于 Python Matplotlib 模块的高质量图形输出
2007-03-29 12:40:47 来源:WEB开发网# A two dimensional GLP set
# with n1=377, n2=610
from matplotlib.matlab import *
def glp(n1, n2):
q = zeros((2, n2), Float)
h1 = 1; h2 = n1
for i in arange(n2-1):
q[0][ i] = (fmod(h1*(i+1), n2)-0.5)/n2
q[1][ i] = (fmod(h2*(i+1), n2)-0.5)/n2
q[0][n2-1] = (n2-0.5)/n2
q[1][n2-1] = (n2-0.5)/n2
return q
n1 = 377; n2 = 610
q = glp(n1, n2)
x = q[0, :]
y = q[1, :]
plot(x, y, 'r.', linewidth=2)
axis([0, 1, 0, 1])
title(r'$
m{GLP set with} n_1 = 377, n_2 = 610$')
savefig('glp.png', dpi = 75)
show()
图4: GLP 集合的分布
最初我们是用 Matlab 来完成这个工作的,现在用 Python 来实现一样很简洁。程序中函数 glp 的实现主要是利用了模快 Numeric,计算得到的结果用 plot 函数直接加以显示,十分方便。这个例子(包括上一个例子)显示了,在利用 Python 进行某些科学及工程计算时,Matplotlib 往往能简洁高效地完成计算结果可视化的工作。
5 工作模式及图形的输出方式
最后简单的介绍一下 Matplotlib 的工作模式以及输出图形的方式。Matplotlib 有两种工作模式:交互模式 (interactive mode) 以及批处理模式 (batch mode)。很容易理解这两种模式的差别。第一种模式就是在某个 Python Shell 的提示符下逐个运行绘图的命令。
第二种模式是先把绘图命令写成一个脚本文件然后在适当的环境中执行这个文件。 最终图形的输出也有两种方式,即 GUI 输出方式和非 GUI 输出方式。简单地说,GUI 方式的输出是把产生的图形直接显示在屏幕上;而非 GUI 方式的输出则是把图形保存为某种格式的文件,比如ps,png格式的文件。不论哪一种方式都与系统使用的 backend 有关 (backend 可以理解为后端的绘图引擎)。与 GUI方式输出有关的 backend 包括 WxPython, TkAgg, Tkinter 等。而与非 GUI 方式有关的 backend 包括 GD, PS,Paint 等。下图总结了目前 Matplotlib 支持的主要backend。
图5: Matplotlib 支持的主要 backend
用户可以根据自己的实际需要选用其中的某种输出方式,当然也可以两种同时使用。以上的几个例子都是同时使用了这两种方式。以上几个 Python 脚本的最后一行命令 show 负责把图形在屏幕上显示出来,而命令 savefig 会把图形保存为相应格式的文件,目前缺省的输出格式是 png 格式。
6 总结
作为一个仍在进行中的项目,Matplotlib 充分利用了 Python 下的 Numeric(Numarray) 模块,提供了一种利用 Python 进行数据可视化的解决方案,进一步加强了 Python 用来进行科学计算的能力。Matplotlib 简单易学,它克隆了众多 Matlab 中的函数,这会让了解 Matlab 的用户受益不少。其他的特点还包括能够绘制多种类型的图形,可以简单灵活对图形的各种属性进行修改,能比较美观地显示图形中的数学公式。与其他的一些绘图程序相比,如 Gnuplot,Matplotlib 的一个吸引人之处就是输出图形的质量较高。不足之处是 Matplotlib 的功能目前还不是很完善, 比如目前还不能支持三维绘图,对 TeX 排版的支持还不充分等等。不过考虑到它是一个还在进行中的项目,这些就不应求全责备了。总的说来,如果您需要一种可视化的工具,并且希望它能有高质量的输出效果,那么 Python 的 Matplotlib 模块应该是一个值得考虑的选择。
Tags:基于 Python Matplotlib
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接