如何在Python中根据椭圆的一般方程式绘制椭圆

时间:2020-01-14 13:39:12

标签: python matplotlib

我知道matplotlib可以根据其中心,半长轴长度,半短轴长度以及x轴和主轴之间的夹角绘制椭圆。但是,像Matlab一样,有什么简单的方法可以根据椭圆的一般方程来绘制椭圆:

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

我找到了一种从通用公式计算中心,半长轴长度,半短轴长度以及x轴与长轴之间的角度的方法。这是网站: link。 我使用这种方法并编写一个函数来计算参数。 因为我是通过绘制椭圆来处理数据,实验数据为我提供了椭圆的一般方程式,所以我会循环很多次(例如500次)并在单个图形上绘制500个椭圆。因此,我正在寻找python是否提供一种直接从椭圆的一般方程式绘制椭圆的方法,而不是每次都计算参数。

谢谢!

1 个答案:

答案 0 :(得分:3)

使用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需要**作为幂函数,因为^保留给bitwise xor。表达式可以写为3*x**2+2*x*y+4*y**2 - 5或使用方程运算符Eq(3*x**2+2*x*y+4*y**2, 5)

plot_implicit的额外参数可以像plot_implicit (3*x**2+2*x*y+4*y**2 - 5, (x, -2, 2), (y, -2, 2))中那样设置x和y的范围。

或者,为了获得更多效果,matplotlibs imshow可以在x,y上绘制一个由z值着色的完整区域。选择diverging colormap,椭圆将显示在diverging norm所指示的中心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

相关问题