Home > Mobile >  Transforming Pyplot x axis
Transforming Pyplot x axis

Time:10-06

I am trying to plot an audio sample's amplitude across the time domain. I've used scipy.io.wavfile to read the audio sample and determine sampling rate:

# read .wav file
data = read("/Users/user/Desktop/voice.wav")

# determine sample rate of .wav file
# print(data[0]) # 48000 samples per second
# 48000 (samples per second) * 4 (4 second sample) = 192000 samples overall

# store the data read from .wav file
audio = data[1]

# plot the data
plt.plot(audio[0 : 192000]) # see code above for how this value was determined

This creates a plot displaying amplitude on y axis and sample number on the x axis. How can I transform the x axis to instead show seconds?

I tried using plt.xticks but I don't think this is the correct use case based upon the error I received:

# label title, axis, show the plot
seconds = range(0,4)
plt.xticks(range(0,192000), seconds)
plt.ylabel("Amplitude")
plt.xlabel("Time")
plt.show()
ValueError: The number of FixedLocator locations (192000), usually from a call to set_ticks, does not match the number of ticklabels (4).

CodePudding user response:

You need to pass a t vector to the plotting command, a vector that you can generate on the fly using Numpy, so that after the command execution it is garbage collected (sooner or later, that is)

from numpy import linspace
plt.plot(linspace(0, 4, 192000, endpoint=False), audio[0 : 192000])
  • Related