不同解构层次的小波系数可视化

Visualization of wavelets coefficients for different deconstruction levels

我正在为小波演示做一些可视化。我需要准备一个类似于右侧的图:

我一直在尝试用频谱图达到这个目标,并且我尝试了一个多小时来至少找到这样的情节的名称。

此图表示不同级别(1、2、3 和 4)的小波变换的细节系数。在左侧,您会看到一个带有阈值的函数。系数值由颜色表示(黑色接近 0,棕色值更高)。

随着小波分解的每一级,系数的数量减少了一半。所以一级样本范围小,四级样本大四倍。

我该怎么做?

好吧,你的问题假设了很多其他问题,但我认为你可能正在寻找 pcolormesh. For instance used this way (I'll put it in a grid 就像你的示例图片一样,数据是随机生成的):

import matplotlib.pyplot as plt
import numpy as np

ax1 = plt.subplot2grid((4,4),(0, 0),rowspan=1,colspan=1)
ax2 = plt.subplot2grid((4,4),(1, 0),rowspan=1,colspan=1)
ax3 = plt.subplot2grid((4,4),(2, 0),rowspan=1,colspan=1)
ax4 = plt.subplot2grid((4,4),(3, 0),rowspan=1,colspan=1)

ax5 = plt.subplot2grid((4,4),(0, 1),rowspan=2,colspan=3)
ax6 = plt.subplot2grid((4,4),(2, 1),rowspan=2,colspan=3)

ax1.plot(range(100),np.random.randint(-100,100,100)/np.arange(1,101,1)**1,color='green')
ax1.axhline(10,color='orange',linestyle='--')
ax1.axhline(-10,color='orange',linestyle='--')
ax1.set_ylim(-20,20)
ax1.set_xticks([])
ax1.set_ylabel('D4',rotation=0)

ax2.plot(range(100),np.random.randint(-100,100,100)/np.arange(1,101,1)**1,color='green')
ax2.axhline(10,color='orange',linestyle='--')
ax2.axhline(-10,color='orange',linestyle='--')
ax2.set_ylim(-20,20)
ax2.set_xticks([])
ax2.set_ylabel('D3',rotation=0)

ax3.plot(range(100),np.random.randint(-100,100,100)/np.arange(1,101,1)**1,color='green')
ax3.axhline(10,color='orange',linestyle='--')
ax3.axhline(-10,color='orange',linestyle='--')
ax3.set_ylim(-20,20)
ax3.set_xticks([])
ax3.set_ylabel('D2',rotation=0)

ax4.plot(range(100),np.random.randint(-100,100,100)/np.arange(1,101,1)**1,color='green')
ax4.axhline(10,color='orange',linestyle='--')
ax4.axhline(-10,color='orange',linestyle='--')
ax4.set_ylim(-20,20)
#ax4.set_xticks([])
ax4.set_ylabel('D1',rotation=0)

X,Y = np.meshgrid(range(1000),range(4))
Z = np.random.randint(0,100,(4,1000))

ax5.pcolormesh(X,Y,Z,cmap = 'copper')
ax5.set_yticks([i for i in range(4)])

Zm = np.ma.masked_where(Z<90,Z)
ax6.pcolormesh(X,Y,Zm,cmap = 'copper')
ax6.set_yticks([i for i in range(4)])

plt.show()

结果是这样的: