3

I write this code and I have error in my subplot. I don't now what is wrong in my code. Can you help me ?

import pywt
import scipy.io.wavfile as wavfile

import matplotlib.pyplot as plt

rate,signal = wavfile.read('a0025.wav')
time = [x /rate for x in range(0,len(signal))]
tree = pywt.wavedec(data=signal[:1000], wavelet='db2', level=4, mode='symmetric')
print(len(tree))
newTree = [tree[0]*0, tree[1]*0, tree[2]*0, tree[3]*0, tree[4]]
recSignal = pywt.waverec(newTree,'db2')
fig, ax = plt.subplot(2, 1)
ax[0].plot(time[:1000], signal[:1000])
ax[0].set_xlabel('Czas [s]')
ax[0].set_ylabel('Amplituda')
ax[1].plot(time[:1000], recSignal[:1000])
ax[1].set_xlabel('Czas [s]')
ax[1].set_ylabel('Amplituda')
plt.show()

The error:

 raise ValueError('Illegal argument(s) to subplot: %s' % (args,))
    ValueError: Illegal argument(s) to subplot: (2, 1)
1
  • 4
    We don't want to read all of your code, and those links might eventually fail. Please paste the relevant parts into your question. Commented Mar 28, 2017 at 17:18

2 Answers 2

15

As the error clearly states, you passed an illegal argument to pyplot.subplot(). If you look at the documentation for that function, you'll see that it takes 3 arguments (which can be condensed in one): ax = plt.subplot(2, 1, 1) or ax = plt.subplot(211).

However, the function that you are looking for is plt.subplots() (note the s at the end), which generates both a figure and an array of subplots:

f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)
Sign up to request clarification or add additional context in comments.

Comments

1

It seems that this bug is in the documentation see https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.subplots.html. They forgot the "s" in the third example. The first two examples are correct however.
e.g.

# using tuple unpacking for multiple Axes
fig, (ax1, ax2) = plt.subplot(1, 2)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplot(2, 2)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.