使用matplotlib绘制表面/等高线图中的3元组数据点

mor*_*ous 21 python r matplotlib rpy2

我有一些由外部程序生成的表面数据作为XYZ值.我想使用matplotlib创建以下图形:

  • 表面图
  • 轮廓图
  • 轮廓图与表面图重叠

我已经看了几个用于在matplotlib中绘制曲面和轮廓的示例 - 但是,Z值似乎是X和Y的函数,即Y~f(X,Y).

我假设我将以某种方式需要转换我的Y变量,但我还没有看到任何示例,它显示了如何执行此操作.

所以,我的问题是:给定一组(X,Y,Z)点,如何从该数据生成表面和等高线图?

顺便说一句,为了澄清,我不想创建散点图.虽然我在标题中提到了matplotlib,但我并不反对使用rpy(2),如果这样我可以创建这些图表.

rem*_*osu 25

要做一个轮廓图,你需要将数据插入到常规网格中http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data

一个简单的例子:

>>> xi = linspace(min(X), max(X))
>>> yi = linspace(min(Y), max(Y))
>>> zi = griddata(X, Y, Z, xi, yi)
>>> contour(xi, yi, zi)
Run Code Online (Sandbox Code Playgroud)

对于表面 http://matplotlib.sourceforge.net/examples/mplot3d/surface3d_demo.html

>>> from mpl_toolkits.mplot3d import Axes3D
>>> fig = figure()
>>> ax = Axes3D(fig)
>>> xim, yim = meshgrid(xi, yi)
>>> ax.plot_surface(xim, yim, zi)
>>> show()

>>> help(meshgrid(x, y))
    Return coordinate matrices from two coordinate vectors.
    [...]
    Examples
    --------
    >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])
    >>> X
    array([[1, 2, 3],
           [1, 2, 3],
           [1, 2, 3],
           [1, 2, 3]])
    >>> Y
    array([[4, 4, 4],
           [5, 5, 5],
           [6, 6, 6],
           [7, 7, 7]])
Run Code Online (Sandbox Code Playgroud)

三维轮廓 http://matplotlib.sourceforge.net/examples/mplot3d/contour3d_demo.html

>>> fig = figure()
>>> ax = Axes3D(fig)
>>> ax.contour(xi, yi, zi) # ax.contourf for filled contours
>>> show()
Run Code Online (Sandbox Code Playgroud)