首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在matplotlib中进行3d绘图时,Z必须是二维的

为什么在matplotlib中进行3d绘图时,Z必须是二维的
EN

Stack Overflow用户
提问于 2018-11-11 16:03:52
回答 2查看 7.1K关注 0票数 7

我正在尝试使用this site中的代码来绘制3d Surface plots

X、Y和Z的取值如下:

代码语言:javascript
复制
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

3d打印是用以下代码完成的:

代码语言:javascript
复制
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值进行绘图,如下所示:

代码语言:javascript
复制
   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
EN

回答 2

Stack Overflow用户

发布于 2018-11-11 19:12:05

这是因为,在我的理解中,要绘制一个表面,你需要形成一个polygon mesh。要绘制3d曲面,您需要有小正方形,例如,在xy平面上,然后为所有x-y点设置1个相应的z值。正方形的面积越小,意味着网格越细,分辨率越高(表面看起来很平滑)。现在,如果您有一组任意的xyz点,matplotlib如何确定要绘制的曲面。这就是为什么需要网格的原因。当然,您可以使用您的数据绘制3d scatterline plots

票数 5
EN

Stack Overflow用户

发布于 2018-11-11 19:11:03

documentation中,你会发现xyz需要一个二维数组。对于坐标xy,您需要使用numpy.meshgrid,如第一段代码中所示。这将为每个坐标创建一个二维数组,其中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)。这意味着g最终是一个3D数组。要在等参曲面方面做到这一点,请看一下these answers

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53246874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档