【问题标题】:Matplotlib- meshgridMatplotlib-网格网格
【发布时间】:2015-11-25 22:39:54
【问题描述】:

我想为网格的解决方案制作一个曲面图。我的域范围从 x 和 y 方向的 [-1, 1] 。我了解我需要为 x 和 y 的 plot_surface(x,y,z) 提供二维数组。但是,我不明白如何为 z 安排这个。

为了让事情更清楚,假设我在每个方向上采用 3 个点的网格间距。我最终分别在 x 和 y 方向上得到 [-1, 0, 1] 和 [-1, 0, 1] 。这给了我 9 分,我需要评估 z。这是我写的:

x = np.linspace(-1,1, 3)
y = np.linspace(-1,1, 3)
X,Y = np.meshgrid(x, y)
# Remaining code uses plot_surface(X, Y, Z_approx)
#

每个 X 和 Y 都是 2D 数组,每个长度为 3。但是,我的 Z“近似值”的长度为 9。然后如何将其绘制在一起?

这是网格的外观!

*(-1,1) ____ *(0,1) ____ *(1,1)

*(-1,0) ____ *(0,0) ____ *(1,0)

*(-1,-1)____ *(0,-1)____ *(1,-1)

【问题讨论】:

  • 提示:Z = np.sin(3*np.sqrt(X*X+Y*Y)); print Z
  • @gboffi 这就是问题所在!我已经有了一个“Z”。我不是想绘制一个确切的解决方案。所以,你刚才提到的关于 Z 的函数对我来说不存在。我通过各个网格点的近似解获得了 Z 的值,这给出了 len(Z) = 9。但是,len(X) 和 len(Y) 各为 3。

标签: python matplotlib pde


【解决方案1】:

当我们不知道您的 z 矩阵是什么时,提供答案有点困难,所以这是我的两个最佳猜测:

  1. z 是一个 1x9(或 9x1)向量,在这种情况下,应使用 np.reshape 命令将其重新整形为 3x3 矩阵。

例如

Z = np.reshape(Z_approx, (3, 3))

  1. z 是一个 9x9 矩阵,在这种情况下,我将使用这个小改动制作 xy 9x9 矩阵而不是 3x3。

例如

x = np.linspace(-1,1, 9)
y = np.linspace(-1,1, 9)

希望对您有所帮助,或者您可以让我们了解更多有关您的 z 矩阵的信息。

【讨论】:

  • 行得通! Z 是一个 9x1 矩阵。谢谢!我仍然不明白二维数组如何促进整个过程。你能解释一下吗?
  • 要绘制 3D 图形,例如曲面图,空间中的每个点需要由 3 个点定义,即您的 x、y 和 z。通过使用 2D 向量(您在 OP 中很好地说明了这一点),您可以为空间中的每个点提供 xyz 值的定义。 OP 中的XY 是您的“网格”,而我的解决方案中的Z 是“海拔”。 3x3 Z 中的每个值都与 XY 矩阵中的坐标之一匹配。有几种解释方式;如果您需要更多指导,请随时给我发消息。
  • 这对我来说确实有意义。我不明白我们为什么要使用网格。我想它会创建适量的 x 和 y 的“组合”以与 z 一起绘制。我希望至少在某种程度上是正确的:)
  • 在二维图中,每 1 个 y 值对应 1 个 x 值。在 3D 图表中,每个 x 值与多个 y 值配对。在您的情况下,x=-1y=-1y=0y=1 配对。 x=0x=1 也是如此。 Meshgrid 本质上为您提供了来自向量的矩阵,以便明确定义这些配对。如果您有两个行向量 xy 定义了绘图的范围,那么绘图中定义的唯一空间是行向量中的值对。通过创建 2D 矩阵,您可以明确说明定义函数 (z) 的点。
猜你喜欢
  • 2020-09-23
  • 2010-12-16
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多