【问题标题】:How to plot 3 arrays as a surface plot in Python如何在 Python 中将 3 个数组绘制为曲面图
【发布时间】:2019-03-06 04:35:09
【问题描述】:

所以,我有三个数据数组,X、Y 和 Z,每个数组有 225 个数字。我想做的是在曲面图上同时绘制所有三个值。当我尝试使用

ax.plot_surface(X,Y,Z)

它告诉我 Z 需要是一个二维数组。我查了一下,发现如果 Z 是 X 和 Y 的函数,可以绘制 Z,但我需要第一个 Z 点与第一个 X 和 Y 点等相关联。这可能在蟒蛇?

【问题讨论】:

  • 在所需的Z 数组中,Z[i,j] 处的值与坐标X[i,j]Y[i,j] 相关联。创建这些数组的最佳方式取决于您的数据。如果它已经以某种方式网格化,则可能足以重塑它们。
  • 顺便说一句。同样的问题here。我不能以重复的形式关闭,因为答案没有任何赞成票。

标签: python arrays matplotlib plot surface


【解决方案1】:

如果你的数组都是一维的,那么我认为你想要的是

ax.plot_trisurf(X,Y,Z, triangles=tri.triangles, cmap=plt.cm.Spectral)

https://matplotlib.org/examples/mplot3d/trisurf3d_demo2.html查看更多信息

【讨论】:

    【解决方案2】:

    所以,我有三个数据数组,X、Y 和 Z,每个数组有 225 个数字。我想做的是在曲面图上同时绘制所有三个值。

    所以,据我了解,您想要绘制 3d 曲面图。 但似乎您只提供 3 个 1xn 数组。 (在这种情况下 n == 255)

    在绘制曲面图时,您在实践中所做的是获取基础(XY 平面)的每一个可能的组合,并告诉给定 XY 坐标上的点 Z 有多高,因此 Z 被描述为一个函数Z(i,j)

    但我需要将第一个 Z 点与第一个 X 和 Y 点等相关联。这在 Python 中可能吗?

    是的,但是如果您将每个 Z 点与第一个 X、Y 等相关联,您将只有 X==Y 的 Z 值,这对于您的曲面图来说是不完整的信息!

    曲面图的一个很好(很棒)的例子来自matplotlib官方docs

    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    from matplotlib import cm
    from matplotlib.ticker import LinearLocator, FormatStrFormatter
    import numpy as np
    
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    # Make data.
    X = np.arange(-5, 5, 0.25)
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)
    R = np.sqrt(X**2 + Y**2)
    Z = np.sin(R)
    
    # Plot the surface.
    surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                           linewidth=0, antialiased=False)
    

    导致:

    代码实际在做什么:

    • 定义输入向量 X 和 Y(范围和区间)
    • 用这些向量制作网格(如果不清楚网格是什么,请打印输出!)
    • 在 X,Y 域上定义函数
    • 应用它得到Z

    如果检查,X、Y 和 Z 是二维数组!

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多