问题描述
我正在尝试使用表面图.html"rel =" nofollow noreferrer>此网站使用matplotlib:
I am trying to plot 3d Surface plots
using code from this site using matplotlib:
X,Y和Z的计算如下:
X,Y and Z are obtained as below:
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绘制:
And 3d plotting is done with following code:
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必须是二维的
.如何使用通常的x,y,z值进行绘制,如下所示:
However, if I replace X,Y and Z by my x,y,z 3d data (sample give below), there is an error that Z has to be 2 dimensional
. How can I plot with usual x,y,z values, as following:
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
推荐答案
根据我的理解,这是因为要绘制表面,您需要形成多边形网格.要绘制3d曲面,您需要在xy平面上具有一个小正方形,然后为所有x-y点具有1个对应的z值.正方形的面积越小,意味着网格越细,分辨率越高(曲面看起来更平滑.)现在,如果您拥有任意一组xyz点,则matplotlib如何确定要绘制的曲面.这就是为什么需要网格物体的原因.您当然可以绘制3d 散点图或线条图与您的数据一起使用.
This is because, in my understanding, to draw a surface you need to form a polygon mesh. To draw a 3d surface, you need to have small squares, for example, on the xy-plane and then have 1 corresponding z value for all the x-y points. The smaller the area of the square means finer mesh-grid and better resolution(smooth-looking surface.) Now if you have an arbitrary set of xyz points, how matplotlib can determine which surface to draw. That is why a mesh is required. You can of course plot 3d scatter or line plots with your data.
这篇关于为什么在Matplotlib中3D绘图必须Z是二维的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!