Я пытаюсь построить график сейсмической волны, используя plt.contour.
У меня есть 3 массива:
- время (ось x)
- частота (ось y)
- амплитуда (ось z)
Пока мои результаты:
Проблема в том, что я хочу изменить масштабирование цветовой шкалы: сделать градацию и не иметь этого белого цвета при низкой амплитуде.Но я не могу этого сделать, хотя я потратил много времени на просмотр документа.
Я прочитал, что plt.pcolormesh
здесь не подходит (он просто работает здесь, потому что я в особом случае), но это то, что я хочу получить относительно цветов и цветовой панели:
Это код, который я написал:
T = len(time[0])*(time[0][1] - time[0][0]) # multiply ampFFT with T to offset
Z = abs(ampFFT)*(T) # abbreviation
# freq = frequency, ampFFT = Fast Fourier Transform of the amplitude of the wave
# freq, amFFT and time have same dimensions: 40 x 1418 (40 steps of time discretization x steps to have the total time. 2D because it is easier to use)
maxFreq = abs(freq).max() # maxium frequency for plot boundaries
maxAmpFFT = abs(Z).max()/2 # maxium ampFFT for plot boundaries of colorbar divided by 2 to scale better with the colors
minAmpFFT = abs(Z).min()
plt.figure(1)
plt.contour(time, freq, Z, vmin=minAmpFFT, vmax=maxAmpFFT)
plt.colorbar()
plt.ylim(0,maxFreq) # 0 to remove the negative frequencies useless here
plt.title("Amplitude intensity regarding to time and frequency")
plt.xlabel('time (in secondes)')
plt.ylabel('frequency (in Hz)')
plt.show()
Спасибо за внимание!
Примечание: на случай, если вас интересует plt.pcolormesh
: график полностью запутан, когда я решаю увеличить дискретизацию времени (здесь я делю время на 40, но когда я делю время на 1000,сюжет не правильный, и я хочу иметь возможность разделить время на более мелкие кусочки).
РЕДАКТИРОВАТЬ: Когда я использую plt.contourf
вместо plt.contour
, я получил этот график: Что тоже не очень убедительно.Я понимаю, почему желтый цвет занимает так много места (это потому, что я установил низкое значение vmax), но я не понимаю, почему на моем графике все еще остается белый цвет.
РЕДАКТИРОВАТЬ 2: Мой учитель составил мои данные, и у меня есть правильные данные.Единственная проблема, которая остается, - это белый фон на моем графике (и темно-синий цвет на левой и правой границе по ни очевидной причине, когда я использую plt.contourf
).Несмотря на эти проблемы, самая высокая амплитуда находится в районе 0,5 Гц, что согласуется с работой моего учителя.
Он использовал gnuplot, но, поскольку я не знаю gnuplot, я предпочитаю использовать python.