# 为什么绘制二维数组时matplotlib等高线图失败

RJCL

``````TypeError: 'list' object is not callable
``````

``````import matplotlib.pyplot as plt
import numpy as np

def lowpass_resp(frq, tau, expon):
return 1/np.sqrt(1+(2.0*np.pi*frq*tau)**expon)

def getcoef(rh, typ, bas, ex):
if typ == 'L':
coef = bas + ex*rh
else:
coef = bas*np.exp(rh*ex)
return coef

Q = [('E', 2.1989, 0.0138,  'L', 1.6139, 0.0196),
('E', 4.8791, 0.003,   'L', 2.0646, 0.0058),
('E', 4.1166, 0.0069,  'L', 2.4588, 0.0011),
('E', 4.103, 0.0123,   'L', -21.513, 0.4472),
('L', -1.3328, 0.1462, 'L', -22.194, 0.459),
('L', 3.0807, 0.0407,  'L', 2.2316, 0.0065),
('E', 0.0184, 0.0627,  'L', 3.4733, -0.0205),
('E', 0.0527, 0.0454,  'L', 3.2077, -0.0133),
('E', 0.1319, 0.0555,  'L', 0.7569, 0.027)]

frq =  np.arange(-50,10)/10.0
frq = 10**frq
rhx = np.arange(10,110, 10)

frq,rhx = np.meshgrid(frq,rhx)

adt = np.dtype=[('tau_type', 'S1'), ('tau_base', 'f'), ('tau_gain', 'f'),('exp_type', 'S1'), ('exp_base', 'f'), ('exp_gain', 'f')]

qcoef = np.array([x for x in Q],dtype=adt)

ix = 0
bcoef = getcoef(rhx, qcoef['tau_type'][ix], qcoef['tau_base'][ix], qcoef['tau_gain'][ix] )
ecoef = getcoef(rhx, qcoef['exp_type'][ix], qcoef['exp_base'][ix], qcoef['exp_gain'][ix] )
tf = lowpass_resp(frq, bcoef, ecoef)

plt.figure()
plt.imshow(tf)
plt.show()

plt.figure()
plt.contourf(frq,rhx,tf)
plt.show()
``````

``````Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/rclement/Dropbox/Code/python/junktest.py", line 69, in <module>
plt.contourf(frq,rhx,tfc)
File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2718, in contourf
ret = ax.contourf(*args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\axes\_axes.py", line 5340, in contourf
File "C:\Python27\lib\site-packages\matplotlib\contour.py", line 1429, in __init__
ContourSet.__init__(self, ax, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\contour.py", line 875, in __init__
self._process_args(*args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\contour.py", line 1442, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "C:\Python27\lib\site-packages\matplotlib\contour.py", line 1512, in _contour_args
self.zmax = ma.maximum(z)
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 5954, in __call__
return self.reduce(a)
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 5971, in reduce
target = target.filled(self.fill_value_func(target)).view(type(target))
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 3496, in filled
fill_value = _check_fill_value(fill_value, self.dtype)
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 401, in _check_fill_value
ndtype = np.dtype(ndtype)
TypeError: 'list' object is not callable
``````
jakevdp

``````adt = np.dtype=[('tau_type', 'S1'), ...
``````

``````adf = [('tau_type', 'S1'), ...
``````

0条评论