【问题标题】:How can I plot a second-degree curve? [duplicate]如何绘制二次曲线? [复制]
【发布时间】:2018-10-30 11:25:52
【问题描述】:

假设我有如下函数:

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()

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

【问题讨论】:

  • 您在使用什么绘图库时遇到问题?你能展示你的代码吗?
  • @timgeb 我包括了被视为重复的问题的答案。但它们适用于多项式函数,但不适用于类似于我的函数。
  • 您的代码块绘制了一个z(x,y) 表面,一个二维对象。你的方程是f(x,y)=0,它为你提供了一个曲线的隐式方程,一个嵌入在 1d 中的 1d 对象。特别是,您有锥形部分。您在问题中提到了“表面”。请澄清术语,以明确您想要什么。
  • @Ahmad f(x,y) = x + y 有两个变量,可以绘制为二维曲面。 f(x,y) = x + y = 0 是定义此函数的水平集 的方程,它是y = -x(x,y) 平面上给出的一维曲线。你的情况也一样。要将f(x,y) 绘制为曲面,还是要绘制f(x,y)=0 曲线?
  • @AndrasDeak 后者 f(x,y) = 0 在二维平面(x 与 y)中。

标签: python matplotlib plot


【解决方案1】:

您需要的是与 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()

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

【讨论】:

  • 非常感谢:)。
猜你喜欢
  • 2017-02-09
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多