在SymPy中,您可以根据表达式自动绘制表面,即
from sympy import symbols
from sympy.plotting import plot3d
x, y = symbols('x y')
monkey_saddle = x**3 - 3*x*y**2
plot3d(monkey_saddle, cmap="RdYlBu")
要得到
我找不到任何可以更改颜色图的kwarg.我知道我可以创建一个lambdify,然后使用matplotlib直接进行绘制.但是我很好奇是否有一种方法可以直接在SymPy中进行.
解决方法:
我阅读了sympy.plotting.plot.py的源代码,看来cmap设置为jet:
collection = self.ax.plot_surface(x, y, z,
cmap=self.cm.jet,
rstride=1, cstride=1,
linewidth=0.1)
您需要设置collections对象的cmap,并在调用plot3d()之前调用unset_show()以禁用对pyplot.show()的调用:
from sympy import symbols
from sympy.plotting import plot3d
from sympy.plotting.plot import unset_show
unset_show()
x, y = symbols('x y')
monkey_saddle = x**3 - 3*x*y**2
p = plot3d(monkey_saddle)
p._backend.ax.collections[0].set_cmap("RdYlBu_r")