【发布时间】:2019-12-29 01:16:01
【问题描述】:
我想使用 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,另一半 = 0?” numpy 很困惑,因为它不知道您是否想知道 any 值或 all 值是否意味着更大的零。除此之外,该方法只会给您一个半球体,因此无论如何您都需要两个线框图,在这种情况下您不应该遇到问题。
-
x是一个数组数组 -
为什么不把你的正半球画两次呢?
cp2=ax.plot_wireframe(X,Y,-Z,color="r") -
我应该澄清一下,我的意思是情节 1 是正数,而 1 是负数,因为它们使用相同的 x,y 网格。
标签: python numpy matplotlib plot 3d