在SymPy的``plot3d``中更改色彩映射

时间:2016-07-14 16:22:55

标签: python matplotlib plot sympy

在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中直接进行。

2 个答案:

答案 0 :(得分:4)

我阅读了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

答案 1 :(得分:1)

要使其与最新的 sympy 版本 (1.7.1) 配合使用,我需要进行一些小的更改:

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[0].collections[0].set_cmap("magma")
p._backend.ax[0].figure.show()

resulting plot