入门
使用python绘制图像需要导入matplotlib下的pylab模块。下面是一个简单的例子。
import pylab as pl
pl.plot(0,0,‘ro’)
pl.show()
# pl.savefig(‘fig.jpg’)
pylab中很多函数和matlab一样,参数的含义也是相似的。例子中plot()函数在原点处画了一个红色的圆点。
pylab在画图时的完整过程应该是先创建一个图像对象,根据给定的xy值画图,将图像显示或保存。这样方便我们同时绘制不同图像。而例中是因为pylab自动创建了一个图像对象,因此代码没有报错。
show()函数会弹出一个窗口显示绘制的图像,并同时清空图像。savefig()函数保存所绘制的图像到指定文件,其字符串参数为文件名,还有一些可选参数,例如savefig(‘fig.jpg’,dpi=300)将分辨率调整为300.
plot()函数
plot()函数的参数为plot(x,y,type)。x和y为两个等长数组(列表、元组或者numpy中的ndarray都可以),给定一组自变量与函数值的对应关系。type为绘图类型(点、线的颜色和形状等),颜色参数有r表示红色,b表示蓝色,g表示绿色,k表示黑色等,点的形状参数有*表示星形,x表示叉形,o表示空心圆点,^表示正三角等,线的形状参数有-表示实线,--表示虚线,-.表示点划线,-..和--.表示更丰富的点划线。其参数含义和matlab一致,可以谷歌查到。
from numpy import *
from pylab import *
x = arange(0,2*pi,0.05)
y = sin(x)
plot(x,y,‘r-’) #用红色实线画出正弦曲线
show()
x = arange(0,1,0.2)
y = x + 1
plot(x,y,‘go’)
#用绿色圆点画出y=x+1直线上,x从0到1间隔0.2的点
show()
三维绘图
三维绘图需要Axes3D,如下语句所示。
from mpl_toolkits.mplot3d import Axes3D
三维绘图仍然可以使用plot()函数(不过这里是Axes3D类的函数了)画点,例如
from mpl_toolkits.mplot3d import Axes3D
import pylab as pl
fig = pl.figure()
ax = Axes3D(fig)
ax.plot(0,1,2,‘ro’)
pl.show()
绘制曲面需要contourf()函数
ax.contourf(x, y, z)
其中x和y为两个等长一维数组,z为二维数组,指定每一对xy所对应的z值。
绘图函数plot()和contourf()都有一个指定透明度的可选参数alpha,其范围是[0,1],0表示完全透明,1表示完全不透明。例如plot(x,y,‘ro’,
alpha=0.2)。
有时需要设置坐标轴的标识,可以使用(或不使用)LaTeX的数学模式标记,例如
ax.set_zlabel('$z$')
为将z轴设置标记为z。
三维绘图有时还需要设置视角(相机的位置),利用view_init()函数。view_init(elev,azim)有两个可选参数,elev指定z轴的倾斜角度(elevation
angle),azim指定x-y平面的方位角(azimuth angle)。例如
ax.view_init(elev=10,azimuth=-30)
阴影
在绘制二维图像时,有时需要在某些区域涂上颜色,可以使用fill_between(x,y0,y1)函数,其中x,y0和y1均为等长一维数组(如果不变化,则也可以简写为常数)。例如
pl.fill_between(x, y0, y1, color='red', alpha=0.2)
表示将x所指定的范围,在y0到y1区域之间涂上红色,透明度为0.2。color参数还可以设定为16进制表示,例如color=‘#FF0000’。
fill_between()函数还有一个可选参数where用于指定涂色条件,例如where=y0>1表示当y0大于1时才涂色,注意不需要用字符串表示。
坐标轴
pylab和matlab一样,会根据图像的分布自动调整x与y方向的范围和比例。当我们想生成一组大小一样的图片时,需要使用xlim()和ylim()函数。例如
xlim(xlow, xhigh)
表示限定显示x坐标的范围在xlow到xhigh之间。
设定坐标轴缩放的比例相同axis(‘equal’),注意该语句与xlim()及ylim()同时使用时可能冲突。
设置坐标轴的标签使用xlabel(‘’)和ylabel(‘’)函数,字符串可以使用LaTeX公式表示的方法,例如xlabel(‘$x_1$’)。
网格
需要添加网格时,使用grid(True)即可,效果如下。
图例
对于多条曲线的图,有时需要指明曲线含义时,可以先指明每种曲线的label,再通过legen()函数使用图例显示。描述label的字符串可以使用LaTeX公式表示方法,不过需要注意公式中的“”均需要使用转义字符表示。示例如下。
plot(x, x+1, ‘b—’, label=‘y=x+1’)
plot(x, x,‘r-’,label=‘$y=\vec{x}$’)
legend()
show()
图例的位置可以通过legend()函数的loc参数进行调整,可以取1-10的整数,分别表示“左中右*上中下”的9个位置(其中5和7为right和center
right,应该是一种位置),例如legend(loc=3)表示将图例放在左下角。
有时图例过大,需要使用较小的字号,可以添加如下语句。
rcParams['legend.fontsize'] = 'small'
如果图例在坐标区域实在放不下,可以使用bbox_to_anchor和bbox_trasform参数,使图例悬浮在外部。例如如下语句的效果。
legend(bbox_to_anchor=(-2,-2,1,1),
bbox_transform=gcf().transFigure)