matplotlib.pyplot을 사용하여 두 개의 그림이 있습니다. 하나는 오디오 파일의 파형입니다. 두 번째는 동일한 오디오의 스펙트로 그램입니다. 나는 파형이 스펙트로 그램 바로 위에 있기를 원한다. (같은 x 축은 함께 정렬된다.) 나는 또한 스펙트로 그램을위한 컬러 바를 원한다.matplotlib.pyplot 색상 막대가 파형과 specgram 옆에 두 행으로 펼쳐지도록하십시오.
문제점 - 컬러 바를 끼우면 스펙트로 그램 행에 부착되고 파형이 컬러 바 위로 확장됩니다 (즉, 스펙트로 그램과 더 이상 시간이 맞춰지지 않으며 스펙트로 그램보다 넓습니다).
나는 해결책에 가깝다고 생각하지만, 나는 내가 잘못하고있는 일이나 내가 원하는대로 일하도록 바꾸는 것이 무엇인지 알 수 없다. 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다! 다음 파이썬 코드를 사용
는(I 가능한 MWE으로 코드를 만든) :
import matplotlib
matplotlib.use("TkAgg")
from scipy.io import wavfile
from matplotlib import mlab
from matplotlib import pyplot as plt
import numpy as np
from numpy.lib import stride_tricks
samplerate, data = wavfile.read('FILENAME.wav')
times = np.arange(len(data))/float(samplerate)
plt.close("all")
####
#Waveform
####
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(13.6, 7.68))
plt.subplot(211)
plt.plot(times, data, color='k')
plt.xlabel('time (s)')
plt.xlim(times[0], times[-1])
max_amp = max(abs(np.amin(data)), abs(np.amax(data)))
min_amp = (max_amp * -1) - abs(np.amin(data) - np.amax(data))/50
max_amp = max_amp + abs(np.amin(data) - np.amax(data))/50
plt.ylim(min_amp, max_amp)
ax = plt.gca()
ax.set_yticks(np.array([min_amp, min_amp/2, 0, max_amp/2, max_amp]))
ax.spines['bottom'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')
ax.xaxis.set_tick_params(pad=115)
####
#Spectrogram
####
Fs = 5000*2.#10000.
NFFT = min(512, len(data))
noverlap = NFFT/2
pad_to = NFFT * 16
dynamicRange = 27.5
vmin = 20*np.log10(np.max(data)) - dynamicRange
cmap = plt.get_cmap('inferno')
plt.subplot(212)
Pxx, freqs, times, cax = plt.specgram(data, NFFT=NFFT, Fs=samplerate, noverlap=noverlap, mode='magnitude', scale='dB', vmin=vmin, pad_to=pad_to, cmap=cmap)
axes_spec = plt.gca()
axes_spec.set_xlim([0., max(times)])
axes_spec.set_ylim([0, 5000])
plt.xlabel("Time (s)")
plt.ylabel("Frequency (hz)")
plt.colorbar(cax, label='(dB)').ax.yaxis.set_label_position('left')
plt.tight_layout()
plt.show()
나는 다음과 같은 플롯 얻을 수 있습니다 : 아래이 약간의 수정을 만들기
을, I 음모를 구할 수 거의 내가 원하는 방법. 문제는 컬러 바 옆에 빈 그림이 생성된다는 것입니다. 빈 그림을 뺀이 버전은 내가 만들고자하는 것입니다. 플롯의
#Replace this for waveform
plt.subplot(221)
#Replace this for spectrogram
plt.subplot(223)
#Add this before colorbar
plt.subplot(122)
새로운 버전 :
편집 : (! 혹은 둘 다 좋은 측정을위한) 나는 또한에 OK입니다 또 다른 가능성이있다 여기에
다음 답변을 보았습니까? http://stackoverflow.com/questions/13784201/matplotlib-2-subplots-1-colorbar –
예. 그렇지만이 상황에 어떻게 적응할 수 있는지 알 수 없습니다. 나는 웹과 질문에서 비슷한 것들을 통합하려는 시도를 많이했지만 스펙트로 그램은 다른 비 스펙트로 그램과 통합하는 방법에 대해 약간 혼란 스럽다. – whatisit
@ pablo-reyes 링크에 대한 답변에서 제공된 방법을 시도하면 [색상 막대가 겹치는 두 개의 그림] (http://imgur.com/a/uT9C3) – whatisit