matplotlib 创建如所附图片所示的图表[已关闭]

yxyvkwin  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(137)

**已关闭。**此问题正在寻求有关书籍、工具、软件库等内容的建议。它不符合Stack Overflow guidelines。当前不接受答案。

我们不允许提出问题来寻求对图书、工具、软件库等的推荐。您可以编辑问题,以便用事实和引文来回答。
27天前关闭
Improve this question
有人知道这个图的名字吗?我没有任何数据集,我也不知道它是如何创建的。
1-有谁能告诉我如何在python中创建这种图吗?我没有任何数据集,所以如果你能告诉我这个图需要什么样的数据集,那就太好了。
2-对我来说,这似乎是一个时间序列linechart,所以任何人都可以提供一个代码来生成一个类似的图表,如所附的图片。


的数据
我试着用一些timeseries数据集样本来做这件事,但结果并没有接近图中所示的图形。

093gszye

093gszye1#

请尝试以下操作:

import numpy as np
    import matplotlib.pyplot as plt

    def f(x):
        return np.sin(20*x) * np.sin(x) + x/3

    x = np.linspace(-2*np.pi, 2*np.pi, 1000)

    y = f(x)

    plt.figure(figsize=(8, 6))
    plt.plot(x, y, label='y = sin(20x) * sin(x) + x/3', color='b')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.grid(True)
    plt.show()

字符串
输出为:


的数据
这个函数可能类似于:f(x) = sin(A*x)*sin(B*x) + x*C,其中A、B和C是一些常数。
至于这个图形的名称,您可能会将其与术语Amplitude modulation联系起来,其中一个正弦波被另一个正弦波调制。

n3schb8v

n3schb8v2#

这看起来像是一个正弦函数,它被另一个正弦函数(在这个例子中是半正弦)调制,然后添加了一个线性偏移。你可以很容易地生成这个:

import numpy as np
import matplotlib.pyplot as plt

rads = np.arange(360)*np.pi/180
base_frequency = 10 #angular frequency
base_sine_curve = np.sin(base_frequency*rads)
modulation_curve = np.sin(rads/2) # half a sine wave
linear_offset = np.arange(360)/180 #increase y value by 0.5 after 360 degrees
xs = np.arange(360)
fig, (ax1,ax2,ax3) = plt.subplots(1,3,figsize=(16,5))
ax1.plot(xs,base_sine_curve,label='base frequency')
ax1.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1))
ax2.plot(xs,modulation_curve,label='modulation frequency')
ax2.plot(xs,base_sine_curve*modulation_curve)
ax2.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1))
ax3.plot(xs,linear_offset,label='linear offset')
ax3.plot(xs,(base_sine_curve*modulation_curve)+linear_offset)
ax3.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1))
plt.show()

字符串
编辑:下面是程序的输出:

显然,您可以重复此操作以获得重复的调制正弦波,但我认为该示例应该按照您的要求执行

相关问题