我想知道如何在matplotlib的帮助下突出显示3D曲面图(由SymPy Plotting Backends完成)(因为我在这里找到了一个示例:How do I highlight a slice on a matplotlib 3D surface plot?)它使用matplotlib。
要创建表面3D绘图,请使用SPB(后端=MB)使用以下代码完成:
from sympy import *
from spb import * # pip install sympy_plot_backends
import matplotlib.pyplot as plt
init_printing()
var("t, omega, s, alpha")
expr = exp(-t) * sin(t)
res = laplace_transform(expr, t, s, noconds=True)
print(res)
colorscale = [
[0, "green"],
[0.01, "orange"],
[0.05, "red"],
[1, "red"]
]
print('The Laplace Transform plot in 3-D:')
plot3d(abs(res.subs(s, alpha + I * omega)), (alpha, -2, 2), (omega, -2, 2),
use_cm=True, colorbar=False, backend=MB)
print('The slice highlighted plot:')
#Z = abs(res.subs(s, alpha + I * omega))
#y0 = 10
#C[y0] = plt.cm.Reds_r(Z[y0]/2)
#plt.figure(figsize = (15,15))
#plt.plot((alpha, -2, 2), (omega, -2, 2),Z[y0,:], color=plt.cm.Reds(.7))
#plt.show()
我注解掉我的试验,它不像我想要的那样工作,这是从alpha轴的一侧看起来应该像的切片:
1条答案
按热度按时间z9gpfhce1#
按照这个问题的建议绘制一个切片是很难用SPB实现的。相反,我们将以不同的方式实现它。
首先,绘制曲面:
接下来,绘制切片,它只不过是3D空间中的参数曲线。例如,在
alpha=-0.5
处绘制切片:最后,合并将这些图合并:
在这里你可以看到Matplotlib的局限性:它不知道线应该被渲染在表面的顶部。这个问题在Plotly中不存在,这就是为什么我在上一个问题中建议后端。
要使用Matplotlib解决这个问题,我们可以绘制两个曲面:
alpha=-2
到alpha=-0.5-eps
,其中eps
是一个小数字。alpha=-0.5+eps
到alpha=2
。我们对两个曲面应用相同的颜色Map表。
然后,将其与切片合并结合: