【Matplotlib】绘制简单图像

绘制正弦函数图像

代码

import math
import matplotlib.pyplot as plt

# 生成正弦曲线x点
nbSamples = 256
# x轴的取值[-pi,pi]
xRange = (-math.pi, math.pi)
x, y = [], []

for n in range(nbSamples):
    ratio = (n + 0.5) / nbSamples
    x.append(xRange[0] + (xRange[1] - xRange[0]) * ratio)
    y.append(math.sin(x[-1]))

plt.plot(x, y)
plt.show()

运行结果

【Matplotlib】绘制简单图像_第1张图片

代码分析

第01行导入了math模块,这是因为我们要用到该模块中的sin()函数。第02行导入了Matplotlib绘图库,并取别名为plt。第07行创建了两个空列表x和y,第09~12行的for循环通过追加(append)模式来填充列表x和y,它们分别作为X轴和Y轴的数据。
列表x、y的构造很费劲。需要先算出每个元素在整个数据集合中的比例系数ratio(第10行),然后根据这个比例系数算出该元素在+π和-π之间的相对位置(第11行),这里的π用math.pi表示。最后,将列表x中最后一个数据(即最新的数据)作为sin()函数的参数值,求出对应的sin(x)值,并逐个将它们追加到x和y列表中。
实际上,绘图的代码只有一行(第15行),即plt.plot(x,y)。这是一个通用命令,在理论上,该命令可接受任意数量的参数。其中x为数据点的横坐标,y为数据点的纵坐标。x和y可以是列表,也可以是数组,但二者的长度要保持一致,否则难以搭配形成绘图坐标。
当然,只有第15行代码也是不够的,图片绘制成功后,如果我们想在屏幕上看到它,还需要通过plt.show()函数来显示绘制的图形(第16行)。

使用NumPy简化数据构造

代码

import math
import matplotlib.pyplot as plt
import numpy as np

# 生成正弦曲线的数据
nbSamples = 256
x = np.linspace(-math.pi, math.pi, num=256)
y = np.sin(x)

# 绘制图像
plt.plot(x, y)
plt.show()

运行结果

【Matplotlib】绘制简单图像_第2张图片

代码分析

代码第07行使用了NumPy的内置方法linspace(linspace(start, stop, num=50),它能批量生成指定区间[start, stop)内的数量为num的均匀间隔的数组向量x。默认情况下,上限stop是无法取到的。不过linspace提供了第三个参数endpoint,这是一个布尔变量,如果它取值为True,则可以取到stop,如果为False,则无法取到stop。
第08行使用了NumPy中的方法sin()。对于NumPy而言,它有一个重要的属性,那就是“向量进,向量出”。由于第07行构造的x为一个向量(你可以理解为具有相同数据类型的一批数据),所以sin(x)会批量产出一个相同维度的向量数组y,两个向量中的元素一一对应。这种“向量进,向量出”的编程模式,就是向量化编程。向量化编程是一种能够消除代码中for循环的编程艺术,它在机器学习(如神经网络训练)领域被广泛应用。

修改图形中线条的属性

代码

import numpy as np
import matplotlib.pyplot as plt
nbSamples = 128

x = np.linspace(-np.pi, np.pi, nbSamples)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, color='g', linewidth=4, linestyle='--')
plt.plot(x, y2, '*', markersize=8, markerfacecolor='r', markeredgecolor='k')

plt.show()

运行结果

【Matplotlib】绘制简单图像_第3张图片

代码分析

在第09行代码中,我们将正弦函数曲线的线条颜色(color)修改成绿色(参数g是green的简写),将线条宽度(linewidth)设置为4,将线条样式(linestyle)由原来的实线改成了虚线。一个字母可表示常用颜色,如表8-1所示。
【Matplotlib】绘制简单图像_第4张图片
在第10行代码中,我们不再使用连续的线条来呈现余弦函数的数据点,而是用离散的五角星来标记显示。同时,我们还修改了标记点(marker)的大小(markersize)、填充色(markerfacecolor)和边线颜色(markeredgecolor)。

plot()中的linestyle参数可以简化一系列由字符串构成的标识,对于'[color][marker] [linestyle]'而言,'g^-'就等价于color='g', marker='^', ls='-'。第10行代码所示的plt.plot(x,y2, '*')用到了部分简化模式。当我们不指定color、linestyle时,plot()函数会为我们自动匹配。

你可能感兴趣的:(机器学习,几何学,python,线性代数)