如何在Python中绘制3个数组作为表面图

时间:2019-03-06 04:35:10

标签: python arrays matplotlib plot surface

因此,我有三个数据数组X,Y和Z,每个数组的长度为225个数字。我想做的是在平面图上同时绘制所有三个值。当我尝试使用

ax.plot_surface(X,Y,Z)

它告诉我Z必须是2D数组。我已经看过它,并且可以看到如果它是X和Y的函数,则可以绘制Z,但是我需要将第一个Z点与第一个X和Y点相关联,等等。 Python?

2 个答案:

答案 0 :(得分:0)

  

因此,我有三个数据数组X,Y和Z,每个数组的长度为225个数字。我想做的是在平面图上同时绘制所有三个值。

因此,据我了解,您想绘制3d表面图。 但是看来您只提供3个1xn阵列。 (在这种情况下,n == 255)

在绘制表面图时,您实际上在做的是获取每个可能的基础(XY平面)组合,并告诉Z点在给定XY坐标上的高度,因此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)

结果为:

enter image description here

代码实际在做什么:

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

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

希望有帮助!

答案 1 :(得分:0)

如果您的数组都是一维的,那么我想您想要的是

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

https://matplotlib.org/examples/mplot3d/trisurf3d_demo2.html

查看更多信息