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

RJCL

我正在尝试使用Contourf图绘制一些结果。X,Y和Z数据均为二维numpy数组。我认为这就像将这些数组传递给Contourf函数一样简单。但是,我得到一个错误:

TypeError: 'list' object is not callable

当我执行代码时,我不确定为什么。如图所示,我可以得到Z数据的imshow图,但是随后的contourf图失败

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
    return mcontour.QuadContourSet(self, *args, **kwargs)
  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'), ...

您已重新定义np.dtype为列表而不是预期的功能。将此行更改为

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

错误就会消失。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

给定范围内的matplotlib等高线图

来自分类Dev

等高线图x标签

来自分类Dev

使用Matplotlib滑块更新等高线图级别

来自分类Dev

Python Matplotlib等高线图中的非线性缩放

来自分类Dev

Matlab:用等高线填充等高线图

来自分类Dev

多元高斯的等高线图

来自分类Dev

等高线图二元对数正态密度函数python

来自分类Dev

从数据框创建等高线图

来自分类Dev

填充matplotlib等高线图

来自分类Dev

填充matplotlib等高线图

来自分类Dev

在matplotlib中绘制最小二乘估计函数的等高线图

来自分类Dev

在给定范围内的matplotlib等高线图

来自分类Dev

从matplotlib等高线图中提取特定路径

来自分类Dev

八度等高线图

来自分类Dev

等高线图x标记

来自分类Dev

等高线图例-Matplotlib

来自分类Dev

Matlab:用等高线填充等高线图

来自分类Dev

Gnuplot-在2D等高线图上绘制数据点

来自分类Dev

使用函数绘制等高线图

来自分类Dev

坏等高线图

来自分类Dev

如何在填充的等高线图中绘制水平线并标记它?

来自分类Dev

在 matplotlib 等高线图中设置轴比例

来自分类Dev

条件等高线图

来自分类Dev

Gnuplot - 在二维等高线图上绘制数据点

来自分类Dev

平滑边缘等高线图

来自分类Dev

在海岸线上绘制等高线图的底图

来自分类Dev

将不同位置的数据绘制为等高线图

来自分类Dev

Python 中 matplotlib 等高线图的 ValueError

来自分类Dev

散景中的等高线图