SymPy符号制图

与Matplotlib不同,SymPy无需离散的数据,仅需符号表达式即可制图

二维曲线

单个图像:

plot(expr, range, **kwargs)

其中expr为表达式,表达式由sympy.abc导入的符号组成

range为三元组(x,l,r),指定了自变量以及上下界

**kwargs指定的参数与matplotlib类似,这里不做过多介绍

多个图像在同一范围:

plot(expr1, expr2, ..., range, **kwargs)

多个图像在不同范围:

plot((expr1, range1), (expr2, range2), ..., **kwargs)

以下代码画出了\(y_1=2\sin x,\ x\in [-6,6]\)\(y_2=\cos(x+\frac \pi 4),\ x\in [-5,5]\)的图像

1
2
3
4
5
6
7
from sympy.plotting import plot
from sympy.abc import x, pi
from sympy.functions import sin, cos
p = plot((2*sin(x), (x, -6, 6)), (cos(x+pi/4), (x, -5, 5)),
show=False, xlabel='$x$', ylabel='$y$')
p.save("plot.png")
p.show()

三维曲线

\(z=\sin(\sqrt{x^2+y^2})\)

1
2
3
4
5
6
7
8
from pylab import rc
from sympy.plotting import plot3d
from sympy.abc import x, y
from sympy.functions import sin, sqrt
rc('font', size=16)
p = plot3d(sin(sqrt(x**2+y**2)), show=False, xlabel='$x$', ylabel='$y$')
p.save('plot3d.png')
p.show()

隐函数画图

sumpy.Eq表示一个方程

Eq(expr_a,expr_b)表示等式两边分别是expr_a,expr_b

Eq(expr)等价于Eq(expr,0)

\((x-1)^2+(y-2)^2-4=0\)

1
2
3
4
5
6
7
8
from pylab import rc
from sympy import plot_implicit, Eq
from sympy.abc import x, y
rc('font', size=16)
p = plot_implicit(Eq((x-1)**2+(y-2)**2-4), show=False,
xlabel='$x$', ylabel='$y$')
p.save('plot_implicit.png')
p.show()