如何在Python中使用椭圆的一般方程绘制椭圆

5

我知道matplotlib可以根据椭圆的中心、半长轴长度、半短轴长度和x轴与长轴之间的角度绘制椭圆。但是是否有一种更简单的方法可以根据椭圆的一般方程绘制椭圆,就像Matlab一样:

ezplot('3*x^2+2*x*y+4*y^2 = 5')

我发现了从通用公式计算椭圆中心、半长轴长度、半短轴长度和x轴与主轴夹角的方法。此网站链接如下: link。 我使用这个方法并编写了一个函数来计算参数。因为我正在通过绘制椭圆来处理数据。实验数据给我提供了椭圆的通用方程。我会进行多次循环(例如500次),并在单个图形上绘制500个椭圆。如果每次绘图之前都这样做,程序会变慢。所以我想知道Python是否提供了一种直接从椭圆的通用方程绘制椭圆的方法,而不是每次计算参数。

谢谢!


1
我喜欢这个问题,但你已经尝试过什么了? - Mr. T
抱歉我之前没有说出我所尝试过的。我已经添加了我尝试过的内容以及为什么想找到一种简单的方法来根据椭圆的一般方程绘制它的原因。谢谢。 - Marcus
1个回答

6
使用sympy,您只需要执行以下操作:
from sympy import plot_implicit, Eq
from sympy.abc import x, y

plot_implicit (Eq(3*x**2+2*x*y+4*y**2, 5))

请注意,Python中幂函数需要使用**,因为^被保留用于按位异或。表达式可以写成3*x**2+2*x*y+4*y**2 - 5或使用等式运算符Eq(3*x**2+2*x*y+4*y**2, 5)plot_implicit的额外参数可以设置x和y的范围,例如plot_implicit (3*x**2+2*x*y+4*y**2 - 5, (x, -2, 2), (y, -2, 2))

另外,要得到更加华丽的效果,matplotlib的imshow可以绘制一个由z值着色的完整的x,y区域。选择一个发散型色图,椭圆将显示在由发散型归一化指示的中心z值处。

import numpy as np
from matplotlib import pyplot as plt
import matplotlib.colors as mcolors

xmin, xmax = -2, 2
ymin, ymax = -2, 2
x, y = np.meshgrid(np.linspace(xmin, xmax, 500), np.linspace(ymin, ymax, 500))
z = 3*x**2+2*x*y+4*y**2

divnorm = mcolors.DivergingNorm(vmin=z.min(), vcenter=5, vmax=z.max())

#plt.contourf(x, y, z, levels=15, norm=divnorm, cmap='seismic')
plt.imshow(z, interpolation='bilinear', norm=divnorm, cmap='seismic', origin='lower', extent=[xmin, xmax, ymin, ymax])

plt.colorbar()
plt.show()

example plot


1
你可以添加x和y的边界以获得更好的框架。plot_implicit (3*x**2+2*x*y+4*y**2 - 5, (x, -2, 2), (y, -2, 2)) - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接