我知道matplotlib可以根据其中心,半长轴长度,半短轴长度以及x轴和长轴之间的角度绘制椭圆。但是有什么简单的方法可以像Matlab一样根据其一般等式绘制椭圆:
ezplot('3*x^2+2*x*y+4*y^2 = 5')
我找到了一种从通用公式计算中心,半长轴长度,半短轴长度以及x轴与长轴之间的角度的方法。这是网站:链接。我使用这种方法并编写一个函数来计算参数。因为我是通过绘制椭圆来处理数据,实验数据为我提供了椭圆的一般方程式,所以我会循环很多次(例如500次)并在单个图形上绘制500个椭圆。因此,我正在寻找python是否提供一种直接从椭圆的一般方程式绘制椭圆的方法,而不是每次都计算参数。
谢谢!
使用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需要**
幂函数,这^
是按位xor保留的。该表达式可以写为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))
。
另外,为了获得更多效果,matplotlibsimshow
可以在x,y中绘制一个由z值着色的完整区域。选择发散的颜色图,椭圆将出现在发散范数指示的中心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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句