Частотная шкала при преобразовании wav-файла в спектрограмму с использованием Python [duplicate]

Очень простой подход, не зависящий от версии python, отсутствовал в уже заданных ответах, которые вы можете использовать большую часть времени (по крайней мере, я):

new_list = my_list * 1       #Solution 1 when you are not using nested lists

Однако, если my_list содержит другие контейнеры ( например, вложенных списков), вы должны использовать функцию глубокой печати, как другие, предложенные в ответах выше, из библиотеки копий. Например:

import copy
new_list = copy.deepcopy(my_list)   #Solution 2 when you are using nested lists

.Bonus: Если вы не хотите копировать элементы, используйте (ака мелкой копии):

new_list = my_list[:]

Давайте понимать разницу между решением # 1 и Solution # 2

>>> a = range(5)
>>> b = a*1
>>> a,b
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
>>> a[2] = 55 
>>> a,b
([0, 1, 55, 3, 4], [0, 1, 2, 3, 4])

Как вы можете видеть, решение № 1 отлично работало, когда мы не использовали вложенные списки. Давайте проверим, что произойдет, когда мы применим решение №1 к вложенным спискам.

>>> from copy import deepcopy
>>> a = [range(i,i+4) for i in range(3)]
>>> a
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
>>> b = a*1
>>> c = deepcopy(a)
>>> for i in (a, b, c): print i   
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
>>> a[2].append('99')
>>> for i in (a, b, c): print i   
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5, 99]]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5, 99]]   #Solution#1 didn't work in nested list
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]       #Solution #2 - DeepCopy worked in nested list
51
задан atomh33ls 8 August 2014 в 12:01
поделиться

1 ответ

Я попытался бы избежать изменения xticklabels, если это возможно, в противном случае это может стать очень запутанным, если вы, например, закроете свою гистограмму дополнительными данными.

Определение диапазона вашей сетки, вероятно, самое лучшее, и с imshow это можно сделать, добавив ключевое слово extent. Таким образом, оси автоматически настраиваются. Если вы хотите изменить ярлыки, я бы использовал set_xticks, возможно, с некоторым форматированием.

fig, ax = plt.subplots(figsize=(6,6))

ax.imshow(hist, cmap=plt.cm.Reds, interpolation='none', extent=[80,120,32,0])
ax.set_aspect(2) # you may also use am.imshow(..., aspect="auto") to restore the aspect ratio

enter image description here [/g0]

92
ответ дан Nils 21 August 2018 в 10:52
поделиться
  • 1
    Также стоит отметить, что interpolation="none" использовался здесь, гораздо более точное представление реальных данных. – Hooked 9 September 2013 в 14:48
  • 2
    Самый полезный ответ; Я использовал его для создания цветового графика функции двух переменных (а именно сейсмических данных). Я также добавил параметр & quot; aspect = 'auto' & quot; в imshow (), чтобы я мог «растягивать и сжимать» сейсмический дисплей. – Kurt Peek 10 May 2014 в 14:27
Другие вопросы по тегам:

Похожие вопросы: