¶引言
这篇记载一下 Python 环境下使用 matplotlib 绘制各种曲线图的用法,阅读这篇文章你将会获得如下内容:
- matplotlib 及环境配置。
- 一幅数据绘图的结构都是如何组成的,与 matplotlib 相关的名称是如何对应的?
- 常见的数据绘图都包含哪些,以及是如何绘制的?
你可能需要的先前技能如下:
- Python 开发环境及 matplotlib 工具包
- Python 基础语法
- Python numpy 包使用
¶matplotlib 安装配置
使用 Python 进行数据绘图前,Python 环境的安装配置是必须,请参看这篇文章:
Python 环境安装配置。
在各种环境中 (Windows、Linux、Mac) 的 matplotlib 环境安装配置如下: (以 Ubuntu 为例)
1 | # 推荐使用这种方式安装 |
当然也可以使用 pip 安装:
1 | sudo pip install numpy |
¶图的基本结构
通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制。 一幅数据图基本上包括如下结构:
- Data: 数据区,包括数据点、描绘形状
- Axis: 坐标轴,包括 X 轴、 Y 轴及其标签、刻度尺及其标签
- Title: 标题,数据图的描述
- Legend: 图例,区分图中包含的多种曲线或不同分类的数据
- 其他的还有图形文本 (Text)、注解 (Annotate)等其他描述
详细的结构图如下图所示:
This figure powered by Snipaste .
¶绘图分类
Matplotlib API 中提供了常见的绘图类型,常用的包括如下:
- 常规图:regular plot
- 直方图:bar plot
- 散点图:scatter plot
- 饼状图:pie plot
- 轮廓图:contour plot
- 3D图:3D plot
- 多子图:subplot
- 显示图片:imshow
参考文献 [3] 详细记录了 API 中的各种类型图的参数说明,不再一一赘述。
¶画法
本篇以常规图为例,详细记录作图流程及技巧。按照绘图结构,可将数据图的绘制分为如下几个步骤:
- 导入 matplotlib 包相关工具包
- 准备数据,numpy 数组存储
- 绘制原始曲线
- 配置标题、坐标轴、刻度、图例
- 添加文字说明、注解
- 显示、保存绘图结果
先给出一个完整的图结构吧,这个图主要是绘制 cos、sin、sqrt 函数图像,如下:
¶导包
涉及到 matplotlib.pyplot、pylab 和 numpy,如:
1 | #coding:utf-8 |
¶准备数据
numpy 常用来组织源数据:
1 | # 定义数据部分 |
¶绘制基本曲线
使用 plot 函数直接绘制上述函数曲线,可以通过配置 plot 函数参数调整曲线的样式、粗细、颜色、标记等:
1 | # 绘制 3 条函数曲线 |
1> color 参数
包含基本的红(red, r)、绿(green, g)、蓝(blue, b)、黑(k)、青色©、洋红色(m)、黄色(y)、白色(w)及其衍生色,还可以使用 6 个 16 进制数表示(如,‘#FF00CC’, ‘#ff00ff’)。
color 参数图片由参考文献 [1] 提供。
2> linestyle 参数
其中,linestyle 参数主要包含虚线、点化虚线、粗虚线、实线,表示符号见下图:
linestyle 参数图片由参考文献 [1] 提供。
3> marker 参数
在曲线上标记特殊的符号,以区分不同的线段,比较实用。常见的形状及表示符号如下图所示:
marker 参数图片由参考文献 [1] 提供。
¶设置坐标轴
可通过如下代码,移动坐标轴 spines,解说详见注释:
1 | # 坐标轴上移 |
可通过如下代码,设置刻度尺间隔 lim、刻度标签 ticks:
1 | # 设置 x, y 轴的刻度取值范围 |
可通过如下代码,设置 X、Y 坐标轴和标题:
1 | # 设置标题、x轴、y轴 |
¶设置文字描述、注解
可通过如下代码,在数据图中添加文字描述 text:
1 | plt.text(4, 1.68, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15) |
// 其中,r’$…$’ 语句表示使用 LaTex 公式符号,LaTex 公式符号见参考文献 [5].
可通过如下代码,在数据图中给特殊点添加注解 annotate:
1 | # 特殊点添加注解 |
¶设置图例
可使用如下两种方式,给绘图设置图例:
1: 在 plt.plot 函数中添加 label 参数后,使用 plt.legend(loc=‘up right’)
2: 不使用参数 label, 直接使用如下命令:
1 | plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right') |
loc 参数表示图例的位置,常见的位置参数如下:
legend loc 参数图片由参考文献 [2] 提供。
¶网格线开关
可使用如下代码,给绘图设置网格线:
1 | # 显示网格线 |
¶显示、保存
1 | plt.show() # 显示 |
本例完整代码已上传 github:
¶显示中文
默认的编程环境无法显示中文字符,这里提供一种方法,添加如下配置代码:
1 |
|
¶其他图画法
按照类型图的分类,下文简要记录一下直方图的基础代码,其他,如散点图、饼状图、轮廓图、3D图、多子图等从参考文献 [1] 获取。
¶直方图
直方图,也即柱状图,使用 bar API 进行绘制
1 | #coding:utf-8 |
以上代码可以得到如下直方图:
¶参考文献
[1] http://www.labri.fr/perso/nrougier/teaching/matplotlib/#beyond-this-tutorial
[2] http://www.bioinfo.org.cn/~casp/temp/spring.lecture/Matplotlib_slides.pdf
[3] http://matplotlib.org/api/pyplot_api.html
[4] http://python.jobbole.com/85106/
[5] http://mohu.org/info/symbols/symbols.htm
¶声明
转载请注明作者和出处,禁止一切商业用途!