程序员数学:用Python学透线性代数和微积分
上QQ阅读APP看书,第一时间看更新

2.5 用Matplotlib绘图

按照先前的承诺,最后向你展示如何使用Matplotlib“从头开始”编写本章中使用的绘图函数。用pip安装Matplotlib后,就可以导入它(以及它的一些子模块)了。

import matplotlib
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection

PolygonPointsArrowSegment类并无特别之处,只是保存了为其构造函数传递的数据。例如,Points类只包含一个构造函数,它接收并存储一个向量列表和一个color关键字参数。

class Points():
    def __init__(self, vectors, color=black):
        self.vectors = list(vectors)
        self.color = color

draw函数首先计算出图形的大小,然后逐一绘制传给它的每个对象。例如,要在Points对象所代表的平面上画点,draw函数会使用Matplotlib的散点绘制功能。

def draw(*objects, ...
    # ...      ←---- 这里省略了一些初始化设置
    for object in objects:      ←---- 遍历传入的对象
    # ...
        elif type(object) == Points:      ←---- 如果当前对象是Points类的实例,则使用Matplotlib的散点函数为其包含的所有向量绘制对应的点
            xs = [v[0] for v  in object.vectors]
            ys = [v[1] for v  in object.vectors]
            plt.scatter(xs, ys, color=object.color)
        # ...

箭头、线段和多边形的处理方式大致相同,使用不同的Matplotlib函数绘制几何图像。可以在源代码文件vector/drawing.py中找到所有这些函数的实现。本书将全程使用Matplotlib来绘制数据和数学函数,在使用过程中,我会定期帮你复习它的功能。

现在你已经掌握了二维向量的相关知识,可以探索更高的维度了。有了第三个维度,就可以完整描述我们生活的世界了。在下一章中,你将学习如何用代码对三维对象进行建模。