绘制contourf图时的值误差

时间:2015-05-04 11:54:03

标签: arrays python-2.7 plot contour contourf

我想绘制某个函数的contourf,我的代码如下:

xlist = linspace(0, 100, 100)
ylist = linspace(0, 100, 200)
X, Y = meshgrid(xlist, ylist)
#print "X = " + str(X)
#print "Y = " + str(Y)
Z = power_at_each_point(X, Y)
#print "Z = " + str(Z)
figure()
CP2 = contourf(X, Y, Z)
colorbar(CP2)
title('Contour Plot')
xlabel('Room-x (m)')
ylabel('Room-y (m)')
show()

当我单独测试时,函数power_at_each_point(X,Y)我写道:

print power_at_each_point(50, 50)

,输出为-80.9187477018

它基本上代表了房间中达到此点的功率,并且它正常输出一个数字但是当我在meshgrid命令之后调用它时它返回一个错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我想获取房间x-coord和y-coord中每个点的坐标,并使用power_at_each_point方法计算此时达到的功率 应该返回一个数字,我在contourf图中表示它。

我的猜测是Z = power_at_each_point的参数(X,Y)从仅仅数字变为我不想要的数组,以及导致错误的原因。 我怎样才能将函数Z = power_at_each_point(X,Y)作为参数X作为数字ex:1和Y ex:2并在此时返回一个幂的值,以便我可以在我的contourf图中表示它。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我发现函数meshgrid想要一个矩阵作为一个参数所以我继续创建一个名为Z的矩阵,我自己填充其中的值,然后我继续进入Z作为meshgrid函数的参数:

x_list = linspace(0, 100, 100)
y_list = linspace(0, 100, 100)
X, Y = meshgrid(x_list, y_list)

Z = [[0 for x in range(len(x_list))] for x in range(len(y_list))]
for each_axes in range(len(Z)):
    for each_point in range(len(Z[each_axes])):
        Z[each_axes][each_point] = power_at_each_point(each_axes, each_point)

figure()
CP2 = contourf(X, Y, Z)

这让我得到了我想要的结果,就像我在这里问的那样。 这些点在Z矩阵中是相反的,或者你可以说是沿水平方向镜像,但这是我要玩的东西,这样我就可以在Z中获得这些元素,以匹配meshgrid实际设置网格点的方式。