赞
踩
谢邀!
解决你这个问题的难点主要在生成作图所需的数据上,即连点成线的数据。为了解需要生成什么数据,可以先来看下方波图长什么样子,涉及了哪些元素。 />
观察这个示例图,一个周期内需要四个点。方波图组成元素有:x轴的范围,图中的x轴范围是0-20;
x轴上一个周期的长度,图中是1;
x轴上一个周期内高低位占比,图中各占50%;
y轴上一个周期内高低位的值,图中是1和0;
y轴上一个周期的初始位置是高位还是低位;
了解了这些,就可以编写绘图所需数据的生成函数了,代码如下:
def rect_square_wave(origin=0, size=20, ratio=0.5, x_unit=1, y0=0, y1=1):
"""
Parameters
----------
origin: number
x 起始位置
size: int
矩阵方波周期数
ratio: number
一个周期中第一部分占比
x_unit: number
x轴中一个周期的长度
y0: number
y轴上周期内第一部分的值
y1: number
y轴上周期内第二部分的值
Returns
-------
返回值可理解二维数据,示例如下:
[[ 0. , 0. ],
[ 0.5, 0. ],
[ 0.5, 2. ],
[ 1. , 2. ],
...
[19. , 0. ],
[19.5, 0. ],
[19.5, 2. ],
[20. , 2. ]]
"""
d = []
for start in range(origin, origin + x_unit * size, x_unit):
d.append((start, y0))
middle = start + x_unit * ratio
d.append((middle, y0))
d.append((middle, y1))
end = start + x_unit
d.append((end, y1))
return d
关于函数的使用,在注释部分已经作了详细说明,而占比主要使用的就是其中ratio参数。不一定足够完美,题主可以在了解了代码后,尝试自己修改。比如周期内的状态如果不止两种,可以修改下for循环中的数据生成代码,从而实现多种状态数据的生成。
下面就可以用它来生成数据和作图了。假设将要绘制的矩形方波图需满足如下几个要求:高低位分别是1和-1,起始位置为0,周期20,每个周期的长度为1,高低占比是0.3和0.7。示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
d = np.array(rect_square_wave(origin=0, size=20, ratio=0.3, x_unit=1, y0=1, y1=-1))
plt.figure(figsize=(15, 5))
plt.plot(d[:, 0], d[:, 1])
需要说明下,因为plot函数接收的前两个参数分别x和y序列,而数据生成函数返回的是一个二维列表,所以这里使用了numpy的切片功能对数据做了些处理。
图形如下: />
回答结束,希望对你能有所帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。