因此,我有三个数据数组X,Y和Z,每个数组的长度为225个数字。我想做的是在平面图上同时绘制所有三个值。当我尝试使用
ax.plot_surface(X,Y,Z)
它告诉我Z必须是2D数组。我已经看过它,并且可以看到如果它是X和Y的函数,则可以绘制Z,但是我需要将第一个Z点与第一个X和Y点相关联,等等。 Python?
答案 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)
结果为:
代码实际在做什么:
如果检查,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
查看更多信息