在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中直接进行。
答案 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")
答案 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()