Визуализация вейвлет-коэффициентов с использованием python - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно подготовить график, похожий на рисунок ниже, используя коэффициенты детализации вейвлет-преобразования. Я пытаюсь в течение более 2 недель, чтобы найти, как я могу это сделать.

enter image description here

Этот график представляет коэффициенты деталей вейвлет-преобразования на разных уровнях (1, 2, 3 и 4). Коэффициенты деталей (cA4, cD4, cD3, cD2, cD1 = coeffs) являются одномерным массивом, каждый из которых имеет свой размер.

<</p>

def wavelet(data):
    waveletname = 'sym5'
    coeffs = wavedec(data, 'sym5', level=5)
    cA5,cD5,cD4,cD3,cD2,cD1=coeffs

>

1 Ответ

1 голос
/ 30 марта 2020

Возможный подход состоит в том, чтобы нарисовать каждый массив в виде 1-мерного изображения, каждое в отдельной позиции y.

plt.imshow нуждается в двумерном массиве, поэтому при изменении формы массива 1 будет иметь первое измерение и исходный размер. Размер как второе измерение дает горизонтальное изображение. (Если это еще не массив numpy, его необходимо преобразовать с помощью np.array(ci).reshape(1, -1)). С помощью параметра extent можно задать ограничивающие значения x и y. interpolation='nearest' показывает жесткие границы между каждым из пикселей. aspect='auto' необходимо, чтобы Imshow не устанавливал фиксированное соотношение сторон.

from matplotlib import pyplot as plt
import numpy as np

# generate six random 1d arrays of different sizes
coeffs = [np.random.uniform(0, 1, np.random.randint(30, 100)) for i in range(6)]
# cA5, cD5, cD4, cD3, cD2, cD1 = coeffs

for i, ci in enumerate(coeffs):
    plt.imshow(ci.reshape(1, -1), extent=[0, 1000, i + 0.5, i + 1.5], cmap='inferno', aspect='auto', interpolation='nearest')

plt.ylim(0.5, len(coeffs) + 0.5) # set the y-lim to include the six horizontal images
# optionally relabel the y-axis (the given labeling is 1,2,3,...)
plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])

plt.show()

resulting plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...