Sympy和绘图

pan*_*ank 2 python plot matplotlib sympy python-3.x

我对使用Sympy如何处理图形有一些疑问。

我的代码:

from sympy import *
x, y = symbols("x y")
plot_implicit(Eq(x**2 + y**2, 4), (x, -3, 3), (y, -3, 3))
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

如何使曲线看起来像圆形?

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

在此处输入图片说明

小智 5

根据plot.py的文档字符串,您可以通过_backend属性获取Matplotlib轴的后端包装和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()
Run Code Online (Sandbox Code Playgroud)

Sympy Plot对象具有append和extend方法,该方法允许将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')
Run Code Online (Sandbox Code Playgroud)