我有一些关于如何使用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轴拉伸的图表。
如何使曲线看起来像一个圆圈?
2)如何将其他元素添加到图表中。例如,点O(0,0)和线y = x。
答案 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')