4

I am using numpy and matplotlib in Python3.
The following code is causing the error:

import matplotlib
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.axes import Subplot as plt
from matplotlib import pylab


 a=[1,1]
 b=[1,1]
 fsam = 48000         
 w, h = freqz(b, a, worN=2000)
 plt.plot(((fsam-8000) * 0.5 / np.pi) * w, abs(h), label=" ")   

The actual error with matplotlib 1.3.x:

 File "/usr/local/lib/python3.2/dist-packages/matplotlib-1.3.x-py3.2-linux-x86_64.egg/matplotlib/axes.py", line 4119, in plot   
     if not self._hold:   
AttributeError: 'numpy.ndarray' object has no attribute '_hold'   

The actual error with matplotlib 1.2.0:

 Traceback (most recent call last):   
   File "/home/christoph/audio_measurement/AudioTools/AudioTools.py", line 222, in <module>   
       main()   
     File "/home/christoph/audio_measurement/AudioTools/AudioTools.py", line 216, in main   
       form = AppForm()   
     File "/home/christoph/audio_measurement/AudioTools/AudioTools.py", line 39, in __init__   
       self.on_draw()   
     File "/home/christoph/audio_measurement/AudioTools/AudioTools.py", line 80, in on_draw   
       self.transfer = Transfer(self.canvas)   
     File "/home/christoph/audio_measurement/AudioTools/Transfer.py", line 42, in __init__   
       plt.plot(((fsam-8000) * 0.5 / np.pi) * w, abs(h), label=" ")   
     File "/usr/local/lib/python3.2/dist-packages/matplotlib/axes.py", line 3995, in plot   
       if not self._hold: self.cla()   
AttributeError: 'numpy.ndarray' object has no attribute '_hold'   

Transfer is the class, which plots onto the canvas.

I had a look at the length of the coefficients a and b, but they did not effect the result.
I could not find anything on that. Does anyone know whats going wrong?

4
  • not yet, will do and report back... Commented Mar 21, 2013 at 15:31
  • similar result for matplotlib 1.2.0 Commented Mar 25, 2013 at 10:43
  • >>> from matplotlib import axes, figure >>> print(type(axes.Axes(figure.Figure(), [0]*4))) <class 'matplotlib.axes.Axes'> Commented Mar 25, 2013 at 12:57
  • with print(str(plt.gca()), type(plt.gca())) i have the error File "/home/christoph/audio_measurement/AudioTools/Transfer.py", line 59, in __init__ self.figure.Axes.get_xaxis(self.transfer).set_visible(False) AttributeError: 'Figure' object has no attribute 'Axes' Commented Mar 27, 2013 at 8:17

1 Answer 1

1

Normally I'd use import matplotlib.pyplot as plt with plt.plot, plt.subplot, plt.show, etc -- or even just from pylab import *. Anyway, this line

from matplotlib.axes import Subplot as plt

is the reason you have an unbound plot function that's trying to operate on the ndarray argument. Subplot needs to be instantiated. This should work:

import numpy as np
from scipy.signal import freqz

import matplotlib
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.axes import Subplot

fig = Figure()
ax = Subplot(fig, 111)
fig.add_subplot(ax)
canvas = FigureCanvas(fig)

a=[1,1]
b=[1,1]
fsam = 48000         
w, h = freqz(b, a, worN=2000)

ax.plot(((fsam-8000) * 0.5 / np.pi) * w, abs(h), label=" ")
canvas.show()
Sign up to request clarification or add additional context in comments.

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.