3.3 绘图
绘图模块允许您制作二维和三维绘图。目前,这些绘图是使用matplotlib作为后端呈现的。如果没有matplotlib,也可以使用textback绘制二维图。
表[]列举了本节所用到的plot, plot_parametric, plot3d, plot3d_parametric函数的通用参数及其功能描述,在sympy.plotting模块中可以导入这些绘图函数,在实际绘图中,我们可以改变相应参数的取值来绘制不同的图形。如果您使用过Mathematica或者Matlab这些专业数学软件,会发现SymPy中存在大量与Mathematica和Matlab中同名的函数。这不仅仅表现在SymPy的绘图模块上,也表现在SymPy的积分,微分等模块。
表[]
title
字符串,标题
xlabel
字符串,x轴坐标,
ylabel
字符串,y轴坐标
legend
布尔类型,显示图例
xscale
{‘linear’,’log’} ,设置x轴范围,
yscale
{‘linear’,’log’},设置y轴范围
axis
布尔类型,显示坐标轴
axis_center
浮点型二元组或{‘center’, ‘auto’}
xlim
浮点型,x轴的极限
yim
浮点型,y轴的极限
aspect_ratio
浮点型二元组或{‘auto’}
autoscale:
布尔类型
margin
0~1之间的浮点数,图边距
3.2.1 二维图形
我们使用SymPy绘制的图形都是在特定的画布上展现的,画布上可以展示一张图也可以同时展示多张图。由于不同图形的范围不同,在同一画布上展示多种图形的时候不同图形的绘图范围也会不同。我们在对SymPy中的绘图函数进行讲解时,按照从单图到多图,从同一画布同范围到同一画布不同范围的方式进行展开。
一元函数
使用plot函数可以绘制一元函数代表的二维图形。
Plot()函数的用法如下:
单图
plot(expr, range, **kwargs)
一张画布显示同范围多图
plot(expr1, expr2, ..., range, **kwargs)
一张画布显示不同范围多图
plot((expr1, range), (expr2, range), ..., **kwargs)
例:在统一张画布中绘制函数与,其中.
[]:from sympy.plotting import plot
[]:p1=plot(x\*\*(-1), (x, -3, 3), ylim=(0, 10), show=False)
p2=plot(x, (x, -3, 3), show=False)
p1.append(p2[0])
p1.show()

在绘制图形的时候,变量p1存储的图形对象,p2存储的图形对象。如果将plot()函数中的show参数改为True,则会在创建plot对象的同时,显示plot图像。使用append方法可以将其他图形增加到已有图形对象的画布中去,使用show()方法可以显示图形对象。plot函数和其他绘图函数一样,默认返回一个列表,其中第0号元素存储第一个图形。因此在使用append方法追加p2列表对象存储的图形时,一定要指定图形所在的位置。在上例中同一样被分别存储在列表p1和p2的第0号位置。
例:在同张画布中绘制函数,其中
[]:x=symbols('x')
p1=plot(x\*\*(-1),ylim=(0, 10), show=False)
p2=plot(x\*\*(1/2), show=False)
p3=plot(x, show=False)
p4=plot(x\*\*2, show=False)
p5=plot(x\*\*3, show=False)
p1.append(p2[0])
p1.extend(p3)
p1.extend(p4)
p1.extend(p5)
p1.show()
使用extend方法可以将向extend方法中传入的列表对象中的图形元素全部追加到目标图形列表后。

例:作出 , , , , , 的函数趋势图。并将图形取名为graph of functions。
[]:plot(x\*\*(-1), log(x), x, x\*log(x), x\*\*2, x\*\*3, (x, -3, 3), ylim=(0,
10), lengend=True, title='graph of functions')

[]:<sympy.plotting.plot.Plot at 0x141d0400>
参数方程
SymPy中的plot_parametric()函数可以绘制参数方程代表的二维图形。
plot_parametric()函数的用法如下:
单图
plot\_parametric(expr_x, expr_y, range, \*\*kwargs)
一张画布显示同范围多图
plot\_parametric((expr1_x, expr1_y), (expr2_x, expr2_y), range, \*\*kwargs)
一张画布显示不同范围多图
plot\_parametric((expr_x, expr_y, range), ..., \*\*kwargs)
例:画出参数方程$$ \begin{cases} x & = 2 \sin x - sin 2x \ y & = 2 \cos x - cos 2x \end{cases}
\begin{cases} x & = t \ y & = \cos t \end{cases}
[]:from sympy.plotting import plot3d_parametric_line
[]:plot3d_parametric_line(x,sin(6\*x)\*x/3,cos(6\*x)\*x/5,(x,0,6\*pi))

[]:\<sympy.plotting.plot.Plot at 0x18f410f0\>
空间曲面
使用plot3d_parametric_surface函数可以绘制参数方程代表的三维图形。
plot3d_parametric_surface的用法如下:
单图
plot3d_parametric\_surface(expr_x, expr_y, expr_z, range_u, range_v, \*\*kwargs)
一张画布显示不同范围多图
plot3d_parametric\_surface((expr_x, expr_y, expr_z, range_u, range_v), ...,
\*\*kwargs)
例:绘制参数方程$$ \begin{cases} x & = \cos (m-n) \ y & = \sin (m-n) \ z & = m - n \end{cases}
Last updated
Was this helpful?