2016-07-14 90 views
3

在SymPy可以自動從表達式繪製表面,即更改顏色表中SymPy的``plot3d``

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中完成。

回答

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