python 大法好,学习python 受益终身。
最近图像处理要用到 python matplotlib 库,有用到的话,都在这里记录。 官方样例地址: http://matplotlib.org/gallery.html
python matplotlib 绘图基本步骤
先看看如下代码:
1 | import numpy as np |
1.载入matplotlib的绘图模块pyplot,并重命名为plt
1 | import matplotlib.pyplot as plt |
2. 调用figure()创建一个Figure(图表)对象
还可以设置DPI(即每英寸所表示的像素数),缺省值为80。因此本例中所创建的Figure对象的宽度为“8*80 = 640”个像素。
3.调用plot()在当前的Figure对象中绘图
参数说明:
- X:X轴数据
- Y:Y轴数据
- 指定曲线的颜色和线性,如'b-'表示,蓝色虚线(b:蓝色,-虚线)
- 使用关键字参数可以指定所绘制的曲线的各种属性:
label:给曲线指定一个标签名称,此标签将在图示中显示。如果标签字符串的前后有字符’$’,则matplotlib会使用其内嵌的LaTex引擎将其显示为数学公式。
color:指定曲线的颜色。颜色可以用如下方法表示
- 英文单词
- 以’#’字符开头的三个16进制数,如’#ff0000’表示红色。
- 0~1的RGB表示,如(1.0, 0.0, 0.0)也表示红色。
linewidth:指定曲线的宽度,可以不是整数,也可以使用缩写形式的参数名lw。 当然,它也可以同时画两个曲线,如下图,同时画出正弦和余弦曲线:
1 | x=np.arange(0,5,0.1) |
4.通过一系列函数设置当前Axes对象的各个属性:
- xlabel、ylabel:分别设置X、Y轴的标题文字。
- title:设置子图的标题。
- xlim、ylim:分别设置X、Y轴的显示范围。
- legend:显示图示,即图中表示每条曲线的标签(label)和样式的矩形区域。
5.调用plt.show()显示出绘图窗口
在通常的运行情况下,show()将会阻塞程序的运行,直到用户关闭绘图窗口。
保存图像
1 | plt.savefig("test.png", dpi=120) |
采用面向对象方法进行绘图
pyplot模块虽然用法简单,但不适合在较大的应用程序中使用。 当前的图表和子图可以使用gcf()和gca()获得
1 | fig = plt.gcf() |
output:
1 | Figure(640x480) Axes(0.125,0.1;0.775x0.8) |
plot()实际上会通过gca()获得当前的Axes对象ax,然后再调用它的plot()方法实现真正的绘图。
1 | def plot(*args, **kwargs): |
配置属性
plot()返回一个元素类型为Line2D的列表 下面的代码中,对x^3的数组取消了抗锯齿效果。
1 | x = np.arange(0, 5, 0.1) |
调用setp()可以同时配置多个对象的属性,这里我们同时设置两条曲线的颜色和线宽:
1 | x = np.arange(0, 5, 0.1) |
绘制多子图
一个Figure对象可以包含多个子图(Axes) 我们可以使用subplot()快速绘制包含多个子图的图表,它的调用形式如下:
1 | subplot(numRows, numCols, plotNum)#行,列,区域号 |
- 图表的整个绘图区域被等分为numRows行和numCols列,然后按照从左到右、从上到下的顺序对每个区域进行编号,左上区域的编号为1。
- 如果新创建的子图和之前创建的子图区域有重叠的部分,则之前的子图将被删除。
- numRows、numCols和plotNum三个参数都小于10,则可以把它们缩写成一个整数,例如subplot(323)和subplot(3,2,3)的含义相同
- subplot()返回它所创建的Axes对象
1 | for idx, color in enumerate("rgbyck"): |
如果希望某个子图占据整行或者整列,可以如下调用subplot():
1 | plt.subplot(221) # 第一行的左图 |
用sca()交替不同图/子图它们成为当前Axes对象,并调用plot()在其中绘图
1 | import numpy as np |
在图表中显示中文
matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文,可以有几种解决方案。
- 在程序中直接指定字体。
- 在程序开头修改配置字典rcParams。
- 修改配置文件。
下面是通过修改字体实现的。其实我也比较喜欢这个
1 | from matplotlib.font_manager import FontProperties |
其他
在图表中输出图像:plt.imshow(img)
柱状图
原地址http://matplotlib.org/examples/statistics/histogram_demo_features.html
1 | # -*- coding:utf-8 -*- |