在同一张图表中绘制两个或多个函数

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的具体示例。
3个回答

7

也许更加高效的方式是同时使用Or进行计算。

plot_implicit(Or(Eq(gradient_1, 0), Eq(gradient_2, 0)))

2
这仍然是最好的方法吗?还是事情已经改变了? - baxx

3
如果你这样做,它可能会起作用:
>>> curve_1.extend(curve_2)
>>> curve_1.show()

然而,混合隐式图可能尚未实现。请注意,您的curve_1和curve_2不是sympy所考虑的“单条曲线”,即Series实例,而是“许多曲线的集合”,即Plot实例。您还可以从curve_1._backend.fig和其他_backend属性中提取matplotlib对象。总之,有一个很好的API可以做你想要的事情,但背后的方法可能尚未完成。

是的,它能工作,太好了!我还找到了另一种方法,使用 "pyplot.contour" (参见这里), 但它需要手动计算梯度,所以你的方法仍然是最好的。你知道它是否可以在网格上绘制吗?我没有看到可以传递给函数的参数中有这个选项… - user2983638

0

另一种方式:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接