Sympy和密谋

时间:2016-11-22 16:55:25

标签: python python-3.x matplotlib plot sympy

我有一些关于如何使用Sympy处理图形的问题。

我的代码:

from sympy import *
x, y = symbols("x y")
plot_implicit(Eq(x**2 + y**2, 4), (x, -3, 3), (y, -3, 3))

1)获得沿x轴拉伸的图表。

enter image description here

如何使曲线看起来像一个圆圈?

2)如何将其他元素添加到图表中。例如,点O(0,0)和线y = x。

enter image description here

1 个答案:

答案 0 :(得分:5)

根据plot.py的文档字符串,您可以获取Matplotlib轴的后端包装并通过_backend属性确定SymPy使用的内容,然后将属性修改为任何其他Matplotlib对象。检查此示例:

import matplotlib.pyplot as plt
import numpy as np
%matplotlib notebook
from sympy import *

x, y = symbols("x y")
hp = plot_implicit(Eq(x**2 + y**2, 4), (x, -3, 3), (y, -3, 3))
fig = hp._backend.fig
ax = hp._backend.ax
xx = yy = np.linspace(-3,3)
ax.plot(xx,yy) # y = x
ax.plot([0],[0],'o') # Point (0,0)
ax.set_aspect('equal','datalim')
fig.canvas.draw()

Sympy Plot对象有追加和扩展方法,允许将Plot对象添加到其他对象,但这不起作用(至少对我而言并使用Jupyter)。

另一种选择是仅使用Matplotlib:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1,1)
xx,yy = np.linspace(-3,3), np.linspace(-3,3)
x,y = np.meshgrid(xx,yy)
ax.contour(x, y, (x**2+y**2-4), [0]);
ax.plot([0],[0],"o")
ax.plot(xx,yy)
ax.set_aspect('equal','datalim')