为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Z 必须是二维的才能在 matplotlib 中进行 3d 绘图

为什么 Z 必须是二维的才能在 matplotlib 中进行 3d 绘图

万千封印 2021-08-14 17:39:54
我正在尝试使用 matplotlibSurface plots使用此站点中的代码绘制 3d :X、Y 和 Z 的获得如下:from math import pifrom numpy import cos, meshgridalpha = 0.7phi_ext = 2 * pi * 0.5def 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 绘图:from mpl_toolkits.mplot3d.axes3d import Axes3Dfig = plt.figure(figsize=(14,6))# `ax` is a 3D-aware axis instance, because of the projection='3d' keyword argument to add_subplotax = 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 barax = 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   z0  12  0  0.11  13  1  0.82  14  3  1.03  16  4  1.24  18  4  0.7
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

在文档中,您会发现x,y并且z需要一个二维数组。对于坐标xy您将需要使用numpy.meshgrid第一段代码中显示的内容。这为每个坐标创建了一个二维数组,其中xy沿另一个方向保持不变,并在其自身方向上变化。

关于z,这也需要是一个二维数组,因为Axes3D.surface_plot 二维数组的每个元素映射z到由x和定义的二维网格y

因此,当您使用自己的x,yz确保使用numpy.meshgridfor xand 时y,然后定义 z = f(x,y) (例如flux_qubit_potential您显示的函数)。

编辑

在 OP 的评论之后,很明显所需的输出是一个函数g为 g = f(x,y,z) 的图。这将意味着g最终是一个 3D 数组。要在等值面方面做到这一点,请查看这些答案。


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 885 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号