Python等高线用plot_surface绘制错误的值

时间:2014-10-07 17:37:09

标签: python matplotlib plot data-visualization

我想在Matplotlib中绘制一个由零组成的曲面,除了以(0,0)为中心的矩形区域,边(Dx,Dy)由一个组成 - 有点像桌子,如果你愿意的话;我可以使用plot_surface命令来做到这一点,不用担心。我还想在“x”和“y”方向上绘制其投影(如在this demo中)并且当结果变得奇怪时:Python似乎在插值我的幅度值(再次,它应该是零或一个)用于等高线图并显示一些具有与我的数据点不对应的值的线。

这就是我正在做的事情:

import numpy
from matplotlib import pylab
from mpl_toolkits.mplot3d import axes3d

Dx = 1.    # Define the sides of the rectangle
Dy = 2.

x_2D = numpy.linspace(-Dx, Dx, 100)     # Create the mesh points
y_2D = numpy.linspace(-Dy, Dy, 100)
x_mesh, y_mesh = numpy.meshgrid(x_2D, y_2D)

rect_2D = numpy.zeros(x_mesh.shape)    # All values of "rect_2D" are zero...
for i in range(x_2D.size):
    for j in range(y_2D.size):
        if numpy.abs(x_mesh[i, j]) <= Dx/2 and numpy.abs(y_mesh[i, j]) <= Dy/2:
            rect_2D[i, j] = 1.         # ... except these ones

fig = pylab.figure(figsize=(9, 7))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x_mesh, y_mesh, rect_2D, alpha=0.3)

ax.contour(x_mesh, y_mesh, rect_2D, zdir='x', offset=-1.5, cmap=pylab.cm.brg)
ax.contour(x_mesh, y_mesh, rect_2D, zdir='y', offset=3, cmap=pylab.cm.brg)

ax.set_xlim(-1.5, 1.5)
ax.set_ylim(-3, 3)
ax.set_zlim(0., 1.5)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

在“x”和“y”投影中,得到的数字有一条深绿色线,幅度略低于0.8,这在我的“rect_2D”变量中不存在。有谁知道这是一个错误还是我的代码中有错误?有关如何摆脱它的任何建议?提前谢谢!

1 个答案:

答案 0 :(得分:0)

levels = [0],电话中添加ax.contour kwarg。这指定了沿zdir轴的位置计算轮廓的位置。有关详细信息,请参阅mpl.axes.Axes.contour docstring。

问题在于,如果没有指定levels,轮廓会自动计算绘制轮廓的位置,其中一个轮廓会在“桌子边缘”之后选择,但在Zdata为0之前。在这些点上轮廓在0和1之间插值。