python - 用自写函数绘制椭圆
问题描述
我知道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(宽度和高度)。
解决方案
由于您只创建一个隐式方程,您可以使用Python 的符号数学库sympy 。默认将在和之间进行plot_implicit()
绘图,但您可以更改限制。要仅显示一个图,请使用. 要创建子图,可以使用:x
y
-5
5
plot_implicit(ellipse(x, y), (x, -2, 10), (y, -2, 10))
show=False
PlotGrid
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
。如果您想要另一个椭圆,您可以更改 和 的值a
,b
或以其他方式更改方程。
顺便说一句,plot_implicit
似乎默认将 x 轴绘制在图的中心,将 y 轴绘制在x=0
. 通常,sympy 的绘图也会在 处绘制 x 轴y=0
。我不知道这是否仅在当前版本中,但是以x轴为中心确实看起来很奇怪。交叉点可以像 一样明确0,0
设置axis_center=(0, 0)
。
或者,您可以使用 numpy 创建网格并使用 matplotlib 绘制轮廓。
推荐阅读
- python - 如何区分()具有混合值的时间序列数据
- laravel - 在下一个计费周期交换订阅 Laravel Cashier
- r - 重命名数据框列表中的第一个列名以匹配数据框的名称
- python - Telebot 消息重复
- javascript - 获取后渲染 React 的组件
- c - C for 循环有两个条件
- unreal-engine4 - 从 MacOS 开发 Oculus Quest 1。缺少 Oculus 可执行操作。Oculus 子系统问题
- nestjs - 在 NestJS Mailer 的 ejs 模板中设置主题
- python - 使用没有 create_oval 的 tkinter 绘制圆
- android - 活动完成时,不调用 Fragment 中的 onActivityResult