【问题标题】:Python matplotlib/pylab - a 3D carpet plotPython matplotlib/pylab - 3D 地毯图
【发布时间】:2012-08-22 23:59:19
【问题描述】:

我想用 Python Pylab 或 matplotlib 绘制 3D 地毯图。我用地毯图解释我的意思:

我在 X、Y 网格上有点。这些点附加了一个高程,但也有一个来自有限集合的整数。一个常见的 3D 绘图使可视化浮雕成为可能。高程沿 Z,我们可以可视化由其沿 Z 轴的坐标 X,Y 确定的点的高程。或者,我为海拔绘制热图。这是一个二维图,由 X,Y 确定的每个像素都有一个颜色,它是高度的函数,红色表示顶点,蓝色表示底部。我对这些数据进行了一些聚类,聚类后,对于每个像素,我有两个信息:高程和标签(整数)。我可以绘制一个 2D 地图,每个像素都用它的标签着色,这给了我聚类结果。

现在,我想在同一个 3D 图上绘制这两个信息。 Z坐标应该是高程,表面上的点应该用它的“集群颜色”着色。这就是我所说的 3D 地毯图(如果术语听起来不正确,请告诉我)。

【问题讨论】:

    标签: python 3d plot matplotlib


    【解决方案1】:

    您的“集群颜色”是网格的 X、Y、Z 值上的一组条件。如果您可以将这些设置为掩码(True/False 值),则将颜色映射到它们上很简单。我给出了一个任意条件集的示例,您可以根据自己的需要进行调整。代码改编自http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html

    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    import numpy as np
    
    # Some sample data
    x_side = np.arange(-5, 5, 0.04)
    y_side = np.arange(-5, 5, 0.04)
    X, Y = np.meshgrid(x_side,y_side)
    
    # Fake mountains
    Z = np.exp(-(X**2+Y**2)) + 2*np.exp(-((X-2)**2+Y**2)) 
    
    # Assign colors based off some user-defined condition
    COLORS = np.empty(X.shape, dtype=str)
    COLORS[:,:] = 'b'
    COLORS[(Z>.1) * (Z<.3)] = 'r'
    COLORS[Z>.3] = 'g'
    COLORS[X+Y < -1] = 'k'
    
    # 3D surface plot
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    surf = ax.plot_surface(X, Y, Z, facecolors=COLORS, rstride=1, cstride=1,
            linewidth=0)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多