等高线图,TypeError:y的长度必须是z中的行数

时间:2015-07-08 22:11:09

标签: python arrays numpy plot

我创建了一个带有两个参数func(x,y)的函数。我现在想把它绘制成2D等高线图,首先是func(x,y)x,然后是func(x,y)y

我将x值的numpy数组设置为从5e48e4的20个值,将y值设置为从1e101e12的20个值。我的函数func(x,y)然后将这两个数组作为参数。

所以,我按如下方式设置了我的情节:

import matplotlib
import matplotlib.pyplot as plt 
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab

matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'

x = np.logspace( 5e4, 8e4, num=20) 
y = np.logspace(1e10, 1e12, num=20)
z = np.asarray([ func(x, y), x ])
plt.figure()
CS = plt.contour(x, y, z)
plt.clabel(CS, inline=1, fontsize=10)

我的numpy数组的形状是:

print x.shape
print y.shape
print z.shape

输出

(20,)
(20,)
(2, 20)

我的错误是

TypeError: Length of y must be number of rows in z.

为什么会这样?尺寸看起来是正确的。

1 个答案:

答案 0 :(得分:1)

来自the docs for contour:“ X和Y 必须都是2-D,形状与Z相同,或者必须都是1-D才能使len(X )是Z中的列数,len(Y)是Z中的行数。“(这是1D X和Y的版本。)

这里你的基本问题是$('a[ng-click="changeData()"]').click(); 需要是矩形的,所以你的情况可能是20x20。也就是说,将等高线图想象为像图像一样放置水平。

最好我能弄清楚,这是一个符合你想要的工作版本:

enter image description here

Z

我认为你没有使用meshgrid的关键(尽管还有其他方法可以解决这个问题)。