如何绘制二次曲线?

时间:2018-10-30 11:25:53

标签: python matplotlib plot

假设我具有如下功能:

a*x^2 + b*y^2 + c*x + d*y + e = 0

如何绘制由该方程式定义的曲线?例如,对于x^2 + y^2 - 1= 0,我希望绘制一个圆。

我发现没有函数可以绘制这样的方程式。就x而言,可以绘制的方程通常采用多项式函数的形式:

y = a*x^n + ....

,另一个问题的答案是:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(x, y)
F = 3 + 2*X + 4*X*Y + 5*X*X

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)
plt.show()

这是三维的二维表面,而我需要二维的曲线。

1 个答案:

答案 0 :(得分:2)

您需要的是与0值相对应的2d曲面的水平集。您应该使用pyplot.contour来减轻工作中的艰苦工作。您只需要定义感兴趣的范围和网格上的功能即可。修改问题中的示例代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
F = 5*X**2 - 4*X*Y + 2*Y**2 + 3*X - 4*Y - 1

fig,ax = plt.subplots()
ax.contour(X, Y, F, levels=[0]) # take level set corresponding to 0
plt.show()

result

网格越细,轮廓线越平滑。