学习matplotlib第二弹
——对pyplot Tutorial的翻译
matplotlib.pyplot是一系列使得matplotlib工作的像MATLAB的命令风格函数 。每个pyplot函数都是对一个figure做操作:创建一个figure,在figure上开辟一块绘图区域,画一些直线在绘图区域,用标签(labels)装饰绘图等等。
matplotlib.pyplot的各种状态变量保存在函数调用中,以便于跟踪记录当前figure和绘图区域,并且绘图函数值作用于当前的figure的坐标轴
import matplotlib.pyplot as plt
#设置Y轴的点
plt.plot([1,2,3,4])
#y轴的label
plt.ylabel('some numbers')
#显示
plt.show()
生成如下图片:
你也许会疑惑为什么x轴的范围是0~3,y轴的范围是1~4。假如你传入一个列表或者数组给plot()命令,matplotlib会假设这是一系列(a sequence of)y值,并且自动地生成x值给你。因为Python的ranges从0开始,这里默认的x向量与y向量有相同的长度并且值从0开始,所以x向量的数据是[0,1,2,3]。
plot()是一个用法多样的命令(versatile command),能够传入任意数据的参数。例如:你可以将上述例子里的
lt.plot([1,2,3,4])
改为如下
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
图片就变为:
对于任何一对x,y参数对,这里有一个可选的第三个参数–格式字串(format string),用来指定颜色和线条类型。格式字符串的字母符号取自MATLIB,在格式字符串中你能使用颜色字串标识颜色,线条类型子串标识线条类型(PS:就像C读文件时的标识串,eg:“r+”,”bw”一个意思)。默认的格式子串是”b-“,表示是一条坚实的蓝色线条。举例:如果要画上一些红色的圈,你要这样写
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()
看plot()的说明文档将有更详细的说明。
上述例子的axis()命令传入一列参数[xmin,xmax,ymin,ymax],指定坐标轴的x,y轴的最大最小值(viewport of the exes)
假如matplotlib只限制于处理这种普通的数据列表格式的数据,那它对数值处理(numeric processing)的作用将非常小。一般来说,你会使用numpy数组。事实上,所有序列都在内部被转换为numpy数组.下面这个例子将说明在一条plot命令传入数组画出不同格式的几条直线。
import numpy as np
import matplotlib.pyplot as plt
# evenly sampled time at 200ms intervals
t = np.arange(0., 5., 0.2)
# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()
图片如下:
如何控制线属性
线条有许多你能够设置的属性:线宽,dash style,抗锯齿等等可以看matplotlib.lines.Line2D这里有几种方法来设置线条属性(line properties)
- 用关键字参数
#设置线宽
plt.plot(x, y, linewidth=2.0)
- 用Line2D实例的设置器方法。假设plot返回一列Line2D对象,如line1,line2=plot(x1, y1, x2, y2).在下面的代码中我们将假使我们只有一条线,所以列表返回的长度是1,把列表以line拆包,我们取列表的第一个element
line, = plt.plot(x, y, '-')
line.set_antialiased(False) # turn off antialising
- 用setp()命令,下面的例子用了MATLAB风格在一系列线条上来设置多重属性,很明显,setp可作用于一系列对象或者单个对象。有能用python关键字参数或者MATLIB风格的 string/value对
lines = plt.plot(x1, y1, x2, y2)
# use keyword args
plt.setp(lines, color='r', linewidth=2.0)
# or MATLAB style string value pairs
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)
下面列出了可用的Line2D属性
如果要得到一系列可设置的线属性,可以调用setp()函数,并以line对象或者一列line对象当做参数传入
In [69]: lines = plt.plot([1, 2, 3])
In [70]: plt.setp(lines)
alpha: float
animated: [True | False]
antialiased or aa: [True | False]
...snip