当前位置:   article > 正文

python画长方形-怎么用python 画出任意占空比的一串矩形方波呢?

pyplot 矩形波

谢邀!

解决你这个问题的难点主要在生成作图所需的数据上,即连点成线的数据。为了解需要生成什么数据,可以先来看下方波图长什么样子,涉及了哪些元素。 />

观察这个示例图,一个周期内需要四个点。方波图组成元素有: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的切片功能对数据做了些处理。

图形如下: />

回答结束,希望对你能有所帮助。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/106514
推荐阅读
相关标签
  

闽ICP备14008679号