如何用matplotlib绘制方程?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我正在尝试做一个函数,它将绘制出我告诉它的任何公式。

import numpy as np  
import matplotlib.pyplot as plt  
def graph(formula, x_range):  
    x = np.array(x_range)  
    y = formula  
    plt.plot(x, y)  
    plt.show()  

以下错误发生时,我相信它是在它到达之前做乘法y = formula

graph(x**3+2*x-4, range(-10, 11))

Traceback (most recent call last):  
  File "<pyshell#23>", line 1, in <module>  
    graph(x**3+2*x-4, range(-10, 11))  
NameError: name 'x' is not defined  
提问于
用户回答回答于

这是因为

graph(x**3+2*x-4, range(-10, 11))

X没有定义。

最简单的方法是将您想要绘制为字符串的函数传递并使用eval将其计算为表达式。

因此,您的代码只要做最小的修改就可以

import numpy as np  
import matplotlib.pyplot as plt  
def graph(formula, x_range):  
    x = np.array(x_range)  
    y = eval(formula)
    plt.plot(x, y)  
    plt.show()

你可以称之为

graph('x**3+2*x-4', range(-10, 11))
用户回答回答于

为了修复您的功能,我们可以:

import numpy as np  
import matplotlib.pyplot as plt  

def graph(formula, x_range):  
    x = np.array(x_range)  
    y = formula(x)  # <- note now we're calling the function 'formula' with x
    plt.plot(x, y)  
    plt.show()  

def my_formula(x):
    return x**3+2*x-4

graph(my_formula, range(-10, 11))

如果您想在一行中完成这一切,您可以使用所谓的lambda函数,它只是一个短函数,没有名称,不使用defreturn:

graph(lambda x: x**3+2*x-4, range(-10, 11))

扫码关注云+社区