在python / pyplot中绘制任意2-D函数,如Matlab的Ezplot

时间:2016-01-06 16:34:05

标签: python matlab matplotlib

我正在寻找一种方法来生成类似于ezplot在MATLAB中的工作方式,我可以输入:

ezplot('x^2 + y^2 = y + 5')

并准备好图表以获取任意功能。我只担心我同时拥有x和y的情况。

我只有这个功能,而且我真的不想尝试计算某些给定x范围的所有y值,如果我不需要的话。

我见过的几个解决方案是关于决策边界(这不是。没有测试数据或任何东西,只是一个任意函数)或全部用于已定义为y =某些x方程的函数真的很帮助我。

如果有一种很好的方法可以模仿Wolfram | Alpha的解决功能(“解决x ^ 2 + y ^ 2 = y + 5 for y”会给我两个函数,我可以再分别绘制) ,但更喜欢ezplot,因为它在MATLAB中或多或少是即时的。

3 个答案:

答案 0 :(得分:7)

我认为您可以使用from sympy.plotting import plot_implicit from sympy.parsing.sympy_parser import parse_expr def ezplot(s): #Parse doesn't parse = sign so split lhs, rhs = s.replace("^","**").split("=") eqn_lhs = parse_expr(lhs) eqn_rhs = parse_expr(rhs) plot_implicit(eqn_lhs-eqn_rhs) ezplot('x^2 + y^2 = y + 5') plotting和parse_expr为此例如,这将如下工作

{{1}}

这可以根据需要进行制作

答案 1 :(得分:0)

您可以使用sympy来求解方程式,然后使用结果函数绘制y over x:

import sympy

x=sympy.Symbol('x')
y=sympy.Symbol('y')
f = sympy.solve(x**2 + y**2 - y - 5, [y])
print f
xpts = (numpy.arange(10.)-5)/10
ypts = sympy.lambdify(x, f, 'numpy')(xpts)

# then e.g.: pylab.scatter(xpts, ypts)

答案 2 :(得分:0)

@EdSmith解决方案正常。不过,我有另一个建议。您可以使用绘图轮廓。您可以将函数重写为f(x, y)=0,然后使用此代码

from numpy import mgrid, pi
import matplotlib.pyplot as plt

def ezplot(f):
    x, y = mgrid[-2*pi:2*pi:51, -2*pi:2*pi:51]
    z = f(x, y)
    ezplt = plt.contour(x, y, f, 0, colors='k')
    return ezplt

这是主要想法。当然,您可以将其概括为MATLAB中的函数,例如xy的一般间隔,将函数作为字符串传递等。