不使用numpy.meshgrid方法创建等高线图?

时间:2014-05-01 12:01:47

标签: python numpy matplotlib

我正在尝试使用给定here的示例来生成我使用的函数的等高线图。我有一个问题,使用numpy.meshgrid这个函数,因为它给了我ValueError: setting an array element with a sequence。 所以我制作了一个列表,它以这种方式获取矩阵中不同点的值:

n_range = numpy.linspace(1,10,100)
mass_range = numpy.logspace(1,6,100)
mu = []
for n in n_range:
    for mass in mass_range:
        mu.append(function(n,mass))
n_range, mass_range = numpy.meshgrid(n_range, mass_range)

所以现在mu有与

对应的条目
mu[100*i + j] = function(n_range[i], mass_range[j])

我现在如何组织另一个将从mu获取值的变量并给出正确的形式,以便我可以根据我创建的numpy.meshgrid绘制此变量?

首次尝试时,我尝试使用此功能:

def plot_contour_mu():
    n_range = np.linspace(1,10,10)
    mass_range = np.logspace(1,6,10)
    n_range, mass_range = np.meshgrid(n_range, mass_range)
    mu = mu0_n_mDM(n_range, mass_range)

但是这导致了上面提到的ValueError,它指向我计算mu0_n_nDM的值,特别是对于该行:

File "mucalc.py", line 109, in mu_0_n_nDM
    return C * B * integrate.romberg(integrand,z_min,z_i)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadrature.py", line 653, in romberg
    ordsum = ordsum + _difftrap(vfunc, interval, n)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadrature.py", line 527, in _difftrap
    s = sum(function(points),0)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadrature.py", line 110, in vfunc
    output[0] = y0

2 个答案:

答案 0 :(得分:2)

我认为您只需要mu重新mu=np.array(mu).reshape(100,100),然后按plt.contourf(n_range,mass_range,mu.T)

绘制它
mu=np.array(mu).reshape(100,100)
plt.contourf(n_range,mass_range,mu.T)
plt.colorbar()

enter image description here

答案 1 :(得分:0)

看看3d绘图教程 - http://matplotlib.org/1.3.1/mpl_toolkits/mplot3d/tutorial.html

numpy meshgrid的文档,看看它返回什么类型的对象 - http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html

你的n_range,mass_range是二维numpy数组。你的亩必须是一样的。这可以通过将n_range和mass_range作为参数传递给函数来实现(假设你的函数可以在numpy数组上运行)。