1. 什么是 matplotlib

Matplotlib 是一个 Python 2D 绘图库,它支持多样化的图像输出格式,可以方便的画出各种统计图形,比如散点图,条行图,饼图等。
它既可以在 Python 脚本和交互环境中使用,也可以在 IPython shell/jupyter notebook/web 中使用

1.1 工具集合

Matplotlib 有一些附加工具集,例如:

工具 功能
Basemap Matplotlib 的子包,可以绘制地图。可视化数据,如在地图上画出城市人口,用户访问密度,挖掘数据内部信息。
cartopy 被设计用来更容易绘制地图数据,可视化数据信息进行数据分析的包
mplot3d 绘制 3d 图形,创建 3d 图形的 2d 投影
seaborn 统计数据可视化库
ggplot 更高层的用最少的代码快速绘制图形的库


2. 安装

2.1 Linux,Mac OSX,Windows 都可以使用 pip 安装

pip install matplotlib

2.2 Linux 也可以使用包管理工具安装

在主要的 Linux 发行版的包管理器,都可以直接安装 matplotlib 和相关工具

  • Debian / Ubuntu : sudo apt-get install python-matplotlib
  • Fedora / Redhat : sudo yum install python-matplotlib

2.3 The Continuum.io Python 发行版

安装 Anaconda 或者 miniconda 后包含 matplotlib 库


2.4 其他可选包

  • tk,pyqt,pygtk,wxpython 可以提供给用户 GUI 界面接口
  • ffmpeg/avconv 或者 mencoder,视频动画需要
  • ImageMagick,gif 动画需要


3. 程序示例

3.1 绘制简单折线图

#!/usr/bin/env python
# coding: utf-8


"""
========================================================
绘制简单折线图
========================================================
演示使用 matplotlib 绘图
"""


import numpy as np
import matplotlib
# 强制不适用任何 Xwindows 后端,必须在 导入 pyplot 之前调用
matplotlib.use('Agg')

import matplotlib.pyplot as plt


def main():
    squares = np.random.rand(10)

    # 绘制折线
    plt.plot(squares)

    # 存储绘制的折线图
    plt.savefig('./sample1.png')


if __name__ == '__main__':
    main()

绘制出来的折线图


3.2,绘制直方图

#!/usr/bin/env python
# coding: utf-8
"""
========================================================
绘制直方图
========================================================

这个例子演示如何通过路径绘制连在一起的矩形
"""

import numpy as np
import matplotlib
# 强制不适用任何 Xwindows 后端,必须在 导入 pyplot 之前调用
matplotlib.use('Agg')

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.path as path


def main():
    # 创建一个绘图区域
    fig, ax = plt.subplots()

    # 使用 numpy 创建柱状图数据
    data = np.random.randn(1000)
    n, bins = np.histogram(data, 50)

    # 计算每个图的左右顶底
    left = np.array(bins[:-1])
    right = np.array(bins[1:])
    bottom = np.zeros(len(left))
    top = bottom + n


    # 通过转置得到每个图的坐标
    XY = np.array([[left, left, right, right], [bottom, top, top, bottom]]).T

    # 设置路径
    barpath = path.Path.make_compound_path_from_polys(XY)

    # 添加路径到绘图区域
    patch = patches.PathPatch(barpath)
    ax.add_patch(patch)

    # 设置图形x,y限制
    ax.set_xlim(left[0], right[-1])
    ax.set_ylim(bottom.min(), top.max())

    # 保存图形文件
    plt.savefig('./sample2.png')


if __name__ == '__main__':
    main()

绘制出来的直方图

right