使用Matplotlib、NumPy和SciPy绘制方波


方波是一种非正弦波形,广泛用于电气和数字电路中表示信号。基本上,这些电路使用方波来表示输入和输出或开和关。Python 提供了几种绘制方波的方法,包括 Matplotlib、NumPy 和 SciPy 库。这些库提供了各种内置方法用于数据可视化,方便创建和自定义方波图。

绘制方波的Python程序

在讨论示例程序之前,有必要熟悉 Matplotlib、NumPy 和 SciPy 库的基础知识。

Matplotlib

它是 Python 中最古老、最广泛使用的绘图库。它提供了一个低级接口,使我们可以完全控制图形的各个方面,例如坐标轴、标签、图例、颜色、标记等等。我们还可以将其与其他库(如 NumPy 和 Pandas)集成,以绘制来自各种来源的数据。

NumPy

这是一个强大的 Python 库,用于存储和处理大型多维数组。我们将在示例程序中使用此包为我们的方波生成随机数据点。

SciPy

Python 的 SciPy 库用于科学计算。它提供了一组内置模块,用于各种操作,例如信号处理、积分、插值等等。我们将使用其名为“signal.square()”的内置方法来返回方波形。

示例1

下面的示例说明了如何使用 matplotlib、numpy 和 scipy 绘制带有网格的方波。

方法

  • 首先,导入 numpy 库,引用名称为“np”,并从 matplotlib 库导入 pyplot 模块,将其重命名为 plt。此外,从 scipy 导入“signal”模块。

  • 接下来,将频率和幅度分别设置为 5 和 1。

  • 使用内置方法“arange()”生成从 0 到 1 的值,步长为 0.001,并将它们存储在 axisX 变量中。

  • 计算周期,它等于频率的倒数。

  • 现在,调用 signal.square() 方法,该方法将 2π、频率和 axisX 的乘积作为参数,以生成方波信号。返回的波形将存储在 axisY 变量中。

  • 然后,使用 plot() 方法,以 axisX 和 axisY 为参数绘制方波。

  • 借助相应的内置方法,提供一些其他详细信息,例如 x 轴和 y 轴标签、标题和网格线。

  • 最后,使用“show()”方法显示绘图。

# importing required packages
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# Setting frequency and amplitude for square wave
frequency = 5
amplitude = 1
# To generate values from 0 to 1 with a step size of 0.001
axisX = np.arange(0, 1, 0.001)
# Generating square wave signal using frequency and amplitude
period = 1.0 / frequency
axisY = amplitude * signal.square(2 * np.pi * frequency * axisX)
# Plotting the square wave with title and labels
plt.plot(axisX, axisY)
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Square Wave Graph')
plt.grid(True)
# to display the final graph
plt.show()

输出

示例2

在这个示例中,我们将演示如何绘制一个带有水平线的方波图,该水平线指示波的中点。为此,我们将修改上一个示例中的代码,添加一行代码,在其中我们将使用 axhline() 方法。此方法在图形的指定点绘制一条水平线。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# Setting frequency and amplitude for square wave
frequency = 5
amplitude = 1
# To generate values from 0 to 1 with a step size of 0.001
axisX = np.arange(0, 1, 0.001)
# Generating square wave signal using frequency and amplitude
period = 1.0 / frequency
axisY = amplitude * signal.square(2 * np.pi * frequency * axisX)
# Plotting the square wave with title and labels
plt.plot(axisX, axisY)
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Square Wave Graph')
plt.axhline(y = 0, color = 'r')
# to display the final graph
plt.show()

输出

示例3

在下面的示例中,我们将绘制带有网格和指示图形中点的水平线的方波。这里,x 轴值将由“axis”提供,y 轴值将通过调用“signal.square”生成。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# To generate values from 0 to 1
axis = np.arange(0, 1, 0.001)
# Plotting the square wave with title and labels
plt.plot(axis, signal.square(2 * np.pi * 5 * axis))
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Square Wave Graph')
plt.axhline(y = 0, color = 'r')
plt.grid(True)
# to display the final graph
plt.show()

输出

结论

在本文中,我们使用 Matplotlib、NumPy 和 SciPy 库绘制了三种不同的方波图。我们使用 NumPy 生成随机数据点,使用 Matplotlib 绘制图形,使用 SciPy 创建方波形。

更新于:2023年7月21日

1K+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告