首页 > 解决方案 > 用自写函数绘制椭圆

问题描述

我知道matplotlib中有一个椭圆函数。但我正在尝试学习更多 Python,所以我想为椭圆编写一个函数,然后绘制它。事实证明我做不到。我有这个,但它没有给我一个椭圆:

def elipse(x,y):
    return (x - a)**2/a**2 + (y - a)**2/b**2 - 1

a = 5
b = 8
x = np.linspace(1,100)
y = np.linspace(1,100)
ell = elipse(x,y)
plt.plot(ell)

我想绘制它,例如给它一个原点和a和b(宽度和高度)。

标签: pythonmatplotlibmath

解决方案


由于您只创建一个隐式方程,您可以使用Python 的符号数学库sympy 。默认将在和之间进行plot_implicit()绘图,但您可以更改限制。要仅显示一个图,请使用. 要创建子图,可以使用:xy-55plot_implicit(ellipse(x, y), (x, -2, 10), (y, -2, 10))show=FalsePlotGrid

from sympy.plotting import plot_implicit, PlotGrid, plot
from sympy.abc import x, y

def ellipse(x, y):
    return (x - a) ** 2 / a ** 2 + (y - a) ** 2 / b ** 2 - 1

a = 4
b = 3

p1 = plot_implicit(ellipse(x, y), (x, -2, 10), (y, -2, 10), axis_center=(0, 0), show=False)
p2 = plot_implicit(ellipse(x, y), (x, -2, 20), (y, -1, 7), axis_center=(0, 0), show=False)
PlotGrid(1, 2, p1, p2)

结果图

两幅图都显示相同的椭圆,最左边的点位于 处0, 4,最顶端的点位于 处4, 7。如果您想要另一个椭圆,您可以更改 和 的值ab或以其他方式更改方程。

顺便说一句,plot_implicit似乎默认将 x 轴绘制在图的中心,将 y 轴绘制在x=0. 通常,sympy 的绘图也会在 处绘制 x 轴y=0。我不知道这是否仅在当前版本中,但是以x轴为中心确实看起来很奇怪。交叉点可以像 一样明确0,0设置axis_center=(0, 0)

或者,您可以使用 numpy 创建网格并使用 matplotlib 绘制轮廓


推荐阅读