【问题标题】:Basic plotting of wavelet analysis output in matplotlibmatplotlib 中小波分析输出的基本绘图
【发布时间】:2013-05-10 12:22:14
【问题描述】:

感谢 python 模块pywt,我在实践中发现了小波。

我浏览了some examples of the pywt module usage,但我无法掌握关键步骤:我基本上不知道如何显示使用matplotlib进行小波分析的多维输出。

这是我尝试过的,(给定一把 pyplot ax ax):

import pywt

data_1_dimension_series = [0,0.1,0.2,0.4,-0.1,-0.1,-0.3,-0.4,1.0,1.0,1.0,0] 
# indeed my data_1_dimension_series is much longer

cA, cD = pywt.dwt(data_1_dimension_series, 'haar')

ax.set_xlabel('seconds')
ax.set_ylabel('wavelet affinity by scale factor')

ax.plot(axe_wt_time, zip(cA,cD))

也可以

data_wt_analysis = pywt.dwt(data_1_dimension_series, 'haar')
ax.plot(axe_wt_time, data_wt_analysis) 

ax.plot(axe_wt_time, data_wt_analysis)ax.plot(axe_wt_time, zip(cA,cD)) 都不合适并返回错误。两者都抛出x and y must have the same first dimension

问题是data_wt_analysis 确实包含几个一维序列,每个小波比例因子一个。 我当然可以显示与比例因子一样多的图表。但我希望它们都在同一张图中。

使用 matplotlib,我怎样才能在一张图中简单地显示这些数据?

类似于下面的彩色方块:

【问题讨论】:

    标签: python matplotlib wavelet pywt


    【解决方案1】:

    你应该从你感兴趣的数组中提取不同的一维序列,并像最简单的例子一样使用 matplotlib

    import matplotlib.pyplot as plt
    plt.plot([1,2,3,4])
    plt.ylabel('some numbers')
    plt.show()
    

    from doc.

    您希望叠加一维图(或线图)。所以,如果你有列表 l1、l2、l3,你会做

    import matplotlib.pyplot as plt
    plt.plot(l1)
    plt.plot(l2)
    plt.plot(l3)
    plt.show()
    

    对于尺度图:我使用的是imshow()。这不是用于小波,而是相同的 ID:颜色图。

    我找到this sample 用于imshow() 与小波,没有尝试思考

    from pylab import *
    import pywt
    import scipy.io.wavfile as wavfile
    
    # Find the highest power of two less than or equal to the input.
    def lepow2(x):
        return 2 ** floor(log2(x))
    
    # Make a scalogram given an MRA tree.
    def scalogram(data):
        bottom = 0
    
        vmin = min(map(lambda x: min(abs(x)), data))
        vmax = max(map(lambda x: max(abs(x)), data))
    
        gca().set_autoscale_on(False)
    
        for row in range(0, len(data)):
            scale = 2.0 ** (row - len(data))
    
            imshow(
                array([abs(data[row])]),
                interpolation = 'nearest',
                vmin = vmin,
                vmax = vmax,
                extent = [0, 1, bottom, bottom + scale])
    
            bottom += scale
    
    # Load the signal, take the first channel, limit length to a power of 2 for simplicity.
    rate, signal = wavfile.read('kitten.wav')
    signal = signal[0:lepow2(len(signal)),0]
    tree = pywt.wavedec(signal, 'db5')
    
    # Plotting.
    gray()
    scalogram(tree)
    show()
    

    【讨论】:

    • 但在这种情况下,所有的都将具有相同的 y=0 来源。我要为我想要的添加一张图片。我读过它叫做 scalograme。
    • 我已经添加了对应的图片。
    • 好吧,我也浏览了这个示例,但我不了解所有步骤。而且我不知道什么是 MRA 树...
    • 这是你从tree = pywt.wavedec(signal, 'db5')得到的,你应该试试这个方法,看看输出的格式
    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2020-03-11
    • 2013-03-02
    • 1970-01-01
    • 2014-08-22
    • 2018-06-27
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多