Reputation: 365
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?
Upvotes: 4
Views: 13547
Reputation: 34260
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()
Upvotes: 1