我创建了一个带有两个参数func(x,y)
的函数。我现在想把它绘制成2D等高线图,首先是func(x,y)
对x
,然后是func(x,y)
对y
。
我将x值的numpy数组设置为从5e4
到8e4
的20个值,将y值设置为从1e10
到1e12
的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.
为什么会这样?尺寸看起来是正确的。
答案 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。也就是说,将等高线图想象为像图像一样放置水平。
最好我能弄清楚,这是一个符合你想要的工作版本:
Z
我认为你没有使用meshgrid
的关键(尽管还有其他方法可以解决这个问题)。