5

我想使用以下代码在同一图中绘制 2 条曲线:

import sympy as syp


x, y = syp.symbols('x, y')

my_function = syp.exp(-(x-2)**2)*syp.exp(-(y-3)**2) + 2*syp.exp(-(x+1)**2)*syp.exp(-(y-1)**2) 

gradient_1 = syp.diff(my_function, x)
gradient_2 = syp.diff(my_function, y)


curve_1 = syp.plot_implicit(syp.Eq(gradient_1, 0))
curve_2 = syp.plot_implicit(syp.Eq(gradient_2, 0))

我看到的只是第一个图,而我希望将两条曲线都放在同一张图片中,如果可能的话,也可以使用网格。有任何想法吗?

注意:使用 matplotlib 非常简单,但我找不到该函数的任何具体示例syp.plot_implicit

4

3 回答 3

6

另一种可能更有效的方法是同时使用Or

plot_implicit(Or(Eq(gradient_1, 0), Eq(gradient_2, 0)))
于 2013-11-12T22:45:01.740 回答
3

如果您这样做,它可能会起作用:

>>> curve_1.extend(curve_2)
>>> curve_1.show()

然而,混合隐式绘图可能尚未实现。

请注意,您的curve_1curve_2不是 sympy 认为的“单曲线”即Series实例,而是“多条曲线的集合”,即Plot实例。

您还可以从curve_1._backend.fig和其他_backend属性中提取 matplotlib 对象。

总之,有一个很好的 API 可以做你想做的事,但它背后的方法可能还没有完成。

于 2013-11-12T15:34:24.710 回答
0

其他方式:

curve_1.append(curve_2[0]) curve_1.show()

于 2017-10-18T08:49:41.043 回答