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()
从代码可以清晰地看到,这个方法的缺点在于,需要事先知道函数的定义域才能生成二维网格。
所以在难以知道定义域的情况下,推荐使用方案二。
参考官方网站
仍然是绘制上面公式表达的四个圆。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)