为什么Z必须是二维才能进行三维打印



我正在尝试使用matplotlib:使用此站点的代码绘制3dSurface plots

X、 Y和Z如下所示:

from math import pi
from numpy import cos, meshgrid
alpha = 0.7
phi_ext = 2 * pi * 0.5
def flux_qubit_potential(phi_m, phi_p):
return 2 + alpha - 2 * cos(phi_p)*cos(phi_m) - alpha * cos(phi_ext - 2*phi_p)
phi_m = linspace(0, 2*pi, 100)
phi_p = linspace(0, 2*pi, 100)
X,Y = meshgrid(phi_p, phi_m)
Z = flux_qubit_potential(X, Y).T

三维绘图是用以下代码完成的:

from mpl_toolkits.mplot3d.axes3d import Axes3D
fig = plt.figure(figsize=(14,6))
# `ax` is a 3D-aware axis instance, because of the projection='3d' keyword argument to add_subplot
ax = fig.add_subplot(1, 2, 1, projection='3d')
p = ax.plot_surface(X, Y, Z, rstride=4, cstride=4, linewidth=0)
# surface_plot with color grading and color bar
ax = fig.add_subplot(1, 2, 2, projection='3d')
p = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
cb = fig.colorbar(p, shrink=0.5)

然而,如果我用X,Y,Z 3d数据(下面给出的示例(替换X,Y和Z,则会出现Z has to be 2 dimensional错误。如何使用常用的x、y、z值进行绘图,如下所示:

x   y   z
0  12  0  0.1
1  13  1  0.8
2  14  3  1.0
3  16  4  1.2
4  18  4  0.7

这是因为,在我看来,要绘制曲面,需要形成多边形网格。要绘制三维曲面,需要在xy平面上有小正方形,然后为所有x-y点都有1个相应的z值。正方形的面积越小,意味着网格越细,分辨率越高(表面看起来光滑。(现在,如果你有一组任意的xyz点,matplotlib可以如何确定要绘制的表面。这就是为什么需要网格。当然,你可以用你的数据绘制三维散点图或折线图。

在文档中,您会发现xyz需要一个2D数组。对于坐标xy,您需要使用第一段代码中显示的numpy.meshgrid。这为每个坐标创建了一个2D阵列,其中xy沿着另一个方向是恒定的,并且在其自己的方向上变化。

关于z,这也需要是2D阵列,因为Axes3D.surface_plot将2D阵列z的每个元素映射为xy定义的2D网格。

因此,当您使用自己的xyz时,请确保将numpy.meshgrid用于xy,然后定义z=f(x,y((例如您显示的函数flux_qubit_potential(。

编辑

在OP的评论之后,很明显,所需的输出是函数g为g=f(x,y,z(的图。这意味着CCD_ 24最终是一个3D阵列。要在等参曲面方面做到这一点,请查看以下答案。

相关内容

  • 没有找到相关文章