Python matplotlib 三维表面图
我正在尝试把一个为Mathematica写的表面图方程(下面有图片和脚本)转换成Python脚本,使用matplotlib库。网上关于表面图的例子不多。
如果能帮我解决我尝试了很多次但都不成功的问题,我会非常感激。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(2,-2)
y = np.linspace(2,-2)
z = np.linspace(2,-2)
surfx = -1 * (pow(y, 10) + pow(z, 10) - 100)
surfy = -1 * (pow(x, 10) + pow(z, 10) - 100)
surfz = -1 * (pow(x, 10) + pow(y, 10) - 100)
ax.plot_surface(surfx,surfy,surfz, rstride=4, cstride=4, color='b')
plt.show()
1 个回答
2
我觉得目前matplotlib没有一个功能可以完全替代这个。如果你不一定要用matplotlib的话,可以看看mayavi和它的contour3d()
函数。
下面的代码使用mayavi生成了一个和你例子相似的图。我不太确定能不能加上线框的轮廓。
import numpy as np
from mayavi import mlab
x, y, z = np.ogrid[-2:2:25j, -2:2:25j, -2:2:25j]
s = np.power(x, 10) + np.power(y, 10) + np.power(z, 10) - 100
mlab.figure(bgcolor=(1,1,1))
mlab.contour3d(s, contours=[2], color=(.5,.5,.5), transparent=True, opacity=.5)
ax = mlab.axes(nb_labels=5, ranges=(-2,2,-2,2,-2,2))
ax.axes.property.color = (0,0,0)
ax.axes.axis_title_text_property.color = (0,0,0)
ax.axes.axis_label_text_property.color = (0,0,0)
ax.axes.label_format='%.0f'
mlab.show()