个性化阅读
专注于IT技术分析

20分钟Python Matplotlib快速教程

本文概述

Matplotlib是Python中的2D图形库。它支持各种平台, 并且功能强大, 可以轻松绘制各种专业图形。本文是有关它的入门教程。

1.运行环境

由于它是Python软件包, 因此你需要首先在计算机上安装Python环境。你可以自己在网络上搜索此内容。

有关如何安装Matplotlib的信息, 请参见此处:Matplotlib安装。

我建议通过pip安装, 方法如下:


sudo pip3 install matplotlib

可以在这里找到本文中的源代码和测试数据:matplotlib_tutorial

本文的代码示例中使用了另一个Python库:NumPy。我还编写了有关NumPy的基本教程, 请参见此处:NumPy教程:Python机器学习库。

该代码在以下环境中经过测试:

  • 苹果OS X 10.13
  • Python 3.6.3
  • matplotlib 2.1.1
  • numpy的1.13.3

2.简介

Matplotlib适用于各种环境, 包括:

  • Python脚本
  • IPython外壳
  • Jupyter笔记本
  • Web应用服务器
  • 用户图形界面工具包

你可以借助Matplotlib轻松生成各种类型的图形, 例如直方图, 频谱图, 条形图, 散点图等。你还可以非常轻松地自定义图形。

3.入门代码示例

让我们看一下最简单的代码示例之一:


# test.py

import matplotlib.pyplot as plt
import numpy as np

data = np.arange(100, 201)
plt.plot(data)
plt.show()

该代码的主要逻辑只有三行, 但是它绘制出一个非常直观的线性图, 如下所示:

20分钟Python Matplotlib快速教程

现在, 让我们解释示例代码的逻辑:

  1. 通过np.arange(100, 201)生成[100, 200]之间的整数数组, 其值是:[100, 101, 102, …, 200]
  2. 通过matplotlib.pyplot将其绘制出来。显然, 绘制的值与图中的纵坐标(y轴)相对应。 matplotlib本身会为我们设置图表的横坐标(x轴):[0, 100], 因为我们正好有100个值。
  3. 通过plt.show()显示图形。

代码很简单。如果已经安装了运行环境, 请将以上代码保存到文本文件(或通过Github获取源代码), 然后可以使用以下命令在自己的计算机上查看以上图形:


python3 test.py

注意1:在以下教程中, 我们将说明如何在图中自定义图像。例如:轴, 图形, 底纹, 线型等。

注2:如有必要, 将在下面的屏幕截图中删除图形外部的边框, 仅保留图形主体。

4.一次绘制多个图形

有时候, 我们可能想一次绘制多个图形, 例如, 当你需要比较两组数据或以另一种方式显示一组数据时。

你可以通过以下方式创建多个图形:

4.1多个数字

图形可以简单地理解为图形窗口。 matplotlib.pyplot将具有默认值, 我们还可以通过plt.figure()创建更多图形, 如以下代码所示:


# figure.py

import matplotlib.pyplot as plt
import numpy as np

data = np.arange(100, 201)
plt.plot(data)

data2 = np.arange(200, 301)
plt.figure()
plt.plot(data2)

plt.show()

它绘制了两个窗口, 每个窗口都是具有不同间隔的折线图, 如下所示:

20分钟Python Matplotlib快速教程

注意:这两个窗口在初始状态下完全重合。

4.2多个子图

在某些情况下, 我们希望在同一窗口中显示多个图形。此时, 你可以使用多个子图。这是一个代码示例:


# subplot.py

import matplotlib.pyplot as plt
import numpy as np

data = np.arange(100, 201)
plt.subplot(2, 1, 1)
plt.plot(data)

data2 = np.arange(200, 301)
plt.subplot(2, 1, 2)
plt.plot(data2)

plt.show()

在上面的代码中, 子图函数的前两个参数指定了子图的数量。因此, 当前图形将以矩阵形式划分, 并且两个参数(它们是整数)分别指定矩阵的行数和列数。第三个参数引用矩阵中的索引。

因此, 以下代码引用2列和1列子图中的第一个子图。


plt.subplot(2, 1, 1)

以下代码引用了2行和1列子图中的第二个子图。


plt.subplot(2, 1, 2)

因此, 代码的结果如下所示:

20分钟Python Matplotlib快速教程

子图函数的参数不仅支持上述形式, 而且还可以将三个整数(不超过10个)组合为一个整数。例如:2、1、1可以写为211, 2、1、2可以写为212。

因此, 以下代码的结果与上面的相同:


import matplotlib.pyplot as plt
import numpy as np

data = np.arange(100, 201)
plt.subplot(211)
plt.plot(data)

data2 = np.arange(200, 301)
plt.subplot(212)
plt.plot(data2)

plt.show()

有关子图功能的更多详细信息, 请参见此处:matplotlib.pyplot.subplot

5.常见的图形示例

Matplotlib可用于生成许多图形样式。来这里看看:Matplotlib Gallery。

作为入门教程, 让我们首先看一些最常用的图形。

5.1线性图

在前面的示例中, 线性图的水平轴上的点是自动生成的, 但是有机会需要设置它们。此外, 我们可能还想自定义线条。看下面的例子:


# plot.py

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [3, 6, 9], '-r')
plt.plot([1, 2, 3], [2, 4, 9], ':g')

plt.show()

我们将获得这样的图形:

20分钟Python Matplotlib快速教程

从代码中, 我们可以知道:

  1. plot函数的第一个数组是水平轴的值, 第二个数组是垂直轴的值, 所以其中一个是直线, 另一个是折线;
  2. 最后一个参数由两个字符组成:线条的样式和颜色。前者是一条红线, 后者是一条绿色虚线。有关样式和颜色的描述, 请参见plot函数的API:matplotlib.pyplot.plot

5.2散点图

散点图函数用于绘制散点图。同样, 该函数还需要两组成对的数据来指定x和y轴的坐标。这是一个代码示例:


# scatter.py

import matplotlib.pyplot as plt
import numpy as np

N = 20

plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='r', s=100, alpha=0.5)

plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='g', s=200, alpha=0.5)

plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='b', s=300, alpha=0.5)

plt.show()

从代码中, 我们可以知道:

  1. 图形包含三组数据, 每组数据包含20个随机坐标。
  2. 参数c代表点的颜色, s代表点的大小, 而alpha代表透明度。

图形将绘制如下:

20分钟Python Matplotlib快速教程

有关散点函数的更多详细信息, 请参见此处:matplotlib.pyplot.scatter

5.3饼图

饼图功能用于绘制饼图。饼图通常用于表示集合各部分的百分比。


# pie.py

import matplotlib.pyplot as plt
import numpy as np

labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

data = np.random.rand(7) * 100

plt.pie(data, labels=labels, autopct='%1.1f%%')
plt.axis('equal')
plt.legend()

plt.show()

从代码中, 我们可以知道:

  1. 数据是一组包含7个数据的随机值
  2. 图形中的标签由标签指定
  3. 值的精度格式由autopct指定
  4. plt.axis(’equal’)用于将轴尺寸设置为一致
  5. plt.legend()指示要绘制图例(请参见下图的右上角)

图形将如下所示:

20分钟Python Matplotlib快速教程

有关Pie函数的更多详细信息, 请参见此处:matplotlib.pyplot.pie

5.4条形图

条形图功能用于绘制条形图。条形图通常用于比较一组数据, 例如一周七天, 每天的城市流量。

这是一个例子:


# bar.py

import matplotlib.pyplot as plt
import numpy as np

N = 7

x = np.arange(N)
data = np.random.randint(low=0, high=100, size=N)
colors = np.random.rand(N * 3).reshape(N, -1)
labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

plt.title("Weekday Data")
plt.bar(x, data, alpha=0.8, color=colors, tick_label=labels)
plt.show()

从代码中, 我们可以知道:

  1. 该图显示了一组具有7个随机值的结果, 每个值都是[0, 100]中的随机数
  2. 它们的颜色也是由随机数生成的。 np.random.rand(N * 3).reshape(N, -1)意味着它将首先生成21(N x 3)个随机数, 然后将它们组合成7行, 因此每行有3个数字, 分别对应颜色的三个组成部分。如果你不懂这行代码, 请查看Python机器学习库NumPy教程。
  3. 标题指定图形的标题, 标签指定标签, 而alpha指定透明度。

图形将如下所示:

20分钟Python Matplotlib快速教程

有关bar功能的更多详细信息, 请参见此处:matplotlib.pyplot.bar

5.5直方图

hist功能用于绘制直方图。直方图看起来有点像条形图。但是它们的含义是不同的。直方图描述了数据在特定范围内出现的频率。也许它有点抽象, 所以让我们通过一个代码示例来理解它:


# hist.py

import matplotlib.pyplot as plt
import numpy as np

data = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]]
labels = ['3K', '4K', '5K']
bins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000]

plt.hist(data, bins=bins, label=labels)
plt.legend()

plt.show()

在上面的代码中, [[3000, 4000, 5000]中n的[np.random.randint(0, n, n)]生成一个包含三个数组的数组, 其中:

  1. 第一个数组包含3000个随机数, 这些随机数的范围是[0, 3000)
  2. 第二个数组包含4000个随机数, 这些随机数的范围是[0, 4000)
  3. 第三个数组包含5000个随机数, 这些随机数的范围是[0, 5000)

bins数组用于指定直方图的边界, 这意味着[0, 100)中将有一个数据点, [100, 500)中将有一个数据点, 依此类推。因此, 最终结果将显示总共7个数据点。并且在代码中还指定了标签和图例。

代码的输出如下所示:

20分钟Python Matplotlib快速教程

从图中可以看到, 三组数据的数据均低于3000, 并且频率相似。但是, 蓝色条的数据均低于3000, 橙色条的数据均低于4000。这与我们的随机数组数据完全相同。

有关hist函数的更多详细信息, 请参见此处:matplotlib.pyplot.hist

六, 结论

现在我们知道了Matplotlib的用法以及如何绘制一些最基本的图形。

应该注意的是, 由于这是一个入门教程, 因此在本文中我们仅提供这些功能和图形的最基本用法。但实际上, 这些功能远不止于此。因此, 你可以转到本文中提供的这些函数的API URL, 以进行进一步的研究。

赞(0)
未经允许不得转载:srcmini » 20分钟Python Matplotlib快速教程

评论 抢沙发

评论前必须登录!