更改SymPy的“plot3d”中的颜色图

在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")

要得到

enter image description here

我找不到任何可以更改颜色图的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")

enter image description here