使用matplotlib绘制隐函数图像

使用matplotlib绘制隐函数图像

方案一:使用matplotlib.pyplot.contour()函数

例如,要绘制以下四个圆:

x 2 + y 2 = 0.5 x 2 + y 2 = 1.0 x 2 + y 2 = 1.2 x 2 + y 2 = 1.5 \begin{aligned} x^2+y^2&=0.5\\x^2+y^2&=1.0\\x^2+y^2&=1.2\\x^2+y^2&=1.5\\ \end{aligned} x2+y2x2+y2x2+y2x2+y2=0.5=1.0=1.2=1.5

代码如下:

xlist = np.linspace(-2.0, 1.0, 100) # Create 1-D arrays for x,y dimensions
ylist = np.linspace(-1.0, 2.0, 100)
X,Y = np.meshgrid(xlist, ylist) # 计算圆所在区域的网格
Z = np.sqrt(X**2 + Y**2) # 计算结果
plt.contour(X, Y, Z, [0.5, 1.0, 1.2, 1.5], colors = ’k’, linestyles = ’solid’)# [0.5, 1.0, 1.2, 1.5] 指明方程右面的值
plt.axes().set_aspect(’equal’) # 使x,y轴的单位长度一致
plt.axis([-1.0, 1.0, -0.5, 0.5]) # 坐标轴显示范围
plt.show()

从代码可以清晰地看到,这个方法的缺点在于,需要事先知道函数的定义域才能生成二维网格。
所以在难以知道定义域的情况下,推荐使用方案二。

方案二:使用sympy库

参考官方网站
仍然是绘制上面公式表达的四个圆。Eq(arg1,arg2)函数中,arg1是不带引号的方程左边表达式,arg2是方程右侧表达式。调用plot_implicit函数绘图:

from sympy import plot_implicit, Eq, symbols
x, y = symbols('x y')
plot_implicit(Eq(x**2 + y**2, 0.5), adaptive=False, points=400)
plot_implicit(Eq(x**2 + y**2, 1.0), adaptive=False, points=400)
plot_implicit(Eq(x**2       , 1.2 - y**2), adaptive=False, points=400)#Eq(x**2, 1.2-y**2)等价于Eq(x**2+y**2, 1.2)
plot_implicit(Eq(x**2 + y**2, 1.5), adaptive=False, points=400)

你可能感兴趣的:(python)