Python ax.plot_表面不提供颜色

Python ax.plot_表面不提供颜色,python,matplotlib,plot,Python,Matplotlib,Plot,我正在尝试制作一个3d绘图,因为wolfram无法处理eq。但是python似乎也有问题。我基本上使用了冲浪图的例子:但它不起作用。有人知道为什么吗? 问题是z曲面的形状非常尖锐,实际上z.max()=inf。您可以做的一件事是用有限最大值替换无限值: z[ np.isinf( z )] = z[ np.isfinite(z)].max( ) 这将给你下面的情节。请注意,我没有设置z限制(ax.set_zlim),以便整个形状可见 如果您只对[-.1.1]之间的绘图部分感兴趣,您可以通过以

我正在尝试制作一个3d绘图,因为wolfram无法处理eq。但是python似乎也有问题。我基本上使用了冲浪图的例子:但它不起作用。有人知道为什么吗?


问题是
z
曲面的形状非常尖锐,实际上
z.max()=inf
。您可以做的一件事是用有限最大值替换无限值:

z[ np.isinf( z )] = z[ np.isfinite(z)].max( )
这将给你下面的情节。请注意,我没有设置z限制(
ax.set_zlim
),以便整个形状可见

如果您只对
[-.1.1]
之间的绘图部分感兴趣,您可以通过以下方式在这些点切断
z

z[ z > .1 ] = .1
z[ z < -.1 ] = -.1
z[z>.1]=.1
z[z<-.1]=-.1
您将获得:


有几件事-首先,如果将公共元素分配给变量,计算速度会更快。比如说,

np.sqrt(x**2 - 4*x + y**2 + 8)
np.sqrt(x**2 + 4*x + y**2 + 8)
在mega-
z
等式中多次使用。将这些计算结果分配给变量,然后在构建
z
时使用这些变量。您将能够更容易地发现错误,并节省CPU周期:

a = np.sqrt(x**2 - 4*x + y**2 + 8)
b = np.sqrt(x**2 + 4*x + y**2 + 8)

c = (2*x**2 *(a + b)-x*(y**2 - 4) * (a - b)-2*(y**2+4)+(a + b)+x**3 * (b - a))
d = (x**2-4 * x+y**2+4) * a*(x**2+4 * x+y**2+4)*b

z = c / d
您的程序无法运行的原因是,在庞大的
z=
等式中的某个地方存在被零除的错误。我将把它留给你们去追踪,但你们可能想做的一件事是仔细检查你们的方程,并确保你们在适当的地方有括号

a = np.sqrt(x**2 - 4*x + y**2 + 8)
b = np.sqrt(x**2 + 4*x + y**2 + 8)

c = (2*x**2 *(a + b)-x*(y**2 - 4) * (a - b)-2*(y**2+4)+(a + b)+x**3 * (b - a))
d = (x**2-4 * x+y**2+4) * a*(x**2+4 * x+y**2+4)*b

z = c / d