我想使用matplotlib绘制单位半径的球体。大多数示例和文档都是通过极坐标来实现的,我的方法是使用笛卡尔坐标系。当我仅使用np.sqrt编写代码时仅显示了上半部分,所以我定义了一个函数sq,仅用于接收错误消息ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
import numpy as np
import matplotlib.pyplot as plt
def sq(x):
if x>=0:
return np.sqrt(x)
else:
return -np.sqrt(abs(x))
ax = plt.axes(projection="3d")
xlist=np.linspace(-1.0,1.0,50)
ylist=np.linspace(-1.0,1.0,50)
r=np.linspace(1.0,1.0,50)
X,Y= np.meshgrid(xlist,ylist)
Z=sq(r**2-X**2-Y**2)
cp=ax.plot_wireframe(X,Y,Z,color="r")
plt.title('The unit sphere')
plt.show()
我如何编辑也会显示下部的程序?
答案 0 :(得分:1)
如果需要创建的半球的另一半,只需绘制相同的半球但为负数即可。您的方法无效,因为对于给定的x,y坐标,您需要2个值(即+/- z)。因此,即使将给定负X的Z值设置为负,也不会获得球体。如果想要更平滑的图,则需要使用极坐标计算来获取正确的球体边界值。
{
"forecasts":[
{
"day":"Tue",
"date":1546934400,
"low":52,
"high":61,
"text":"Rain", // Take this value, and use your own image based on it.
"code":12
}
]
}
注意
如果您希望使用这种方法使球体看起来更像球体,则可以提高分辨率并像这样增加import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
ax = plt.axes(projection="3d")
xlist=np.linspace(-1.0,1.0,50)
ylist=np.linspace(-1.0,1.0,50)
r=np.linspace(1.0,1.0,50)
X,Y= np.meshgrid(xlist,ylist)
Z=np.sqrt(r**2-X**2-Y**2) #Use np.sqrt like you had before
cp=ax.plot_wireframe(X,Y,Z,color="r")
cp=ax.plot_wireframe(X,Y,-Z,color="r") # Now plot the bottom half
plt.title('2D Contour Plot of The unit sphere')
plt.show()
和rstride
。您也可以旋转轴。例如:
cstride