使用matplotlib绘制方程图

Åth*_*enå 31 python matplotlib

我正在尝试创建一个函数来绘制我告诉它的任何公式.

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()  
Run Code Online (Sandbox Code Playgroud)

当我尝试调用它时会发生以下错误,我相信它会在它到达之前尝试进行乘法运算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  
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 60

你的猜测是正确的:代码正试图x**3+2*x-4立即评估.不幸的是,你无法阻止它这样做.好消息是,在Python中,函数是一流的对象,我的意思是你可以像对待任何其他变量一样对待它们.所以为了修复你的功能,我们可以做到:

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))
Run Code Online (Sandbox Code Playgroud)

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

graph(lambda x: x**3+2*x-4, range(-10, 11))
Run Code Online (Sandbox Code Playgroud)

而不是range,您可以查看np.arange(允许非整数增量),并np.linspace允许您指定开始,停止和要使用的点数.


rpu*_*kar 25

这是因为符合要求

graph(x**3+2*x-4, range(-10, 11))
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

你可以称之为

graph('x**3+2*x-4', range(-10, 11))
Run Code Online (Sandbox Code Playgroud)

  • 这里根本不需要使用eval,它增加了开销 (9认同)

jel*_*015 7

要绘制未针对特定变量(如圆或双曲线)求解的方程:

import numpy as np  
import matplotlib.pyplot as plt  
plt.figure() # Create a new figure window
xlist = np.linspace(-2.0, 2.0, 100) # Create 1-D arrays for x,y dimensions
ylist = np.linspace(-2.0, 2.0, 100) 
X,Y = np.meshgrid(xlist, ylist) # Create 2-D grid xlist,ylist values
F = X**2 + Y**2 - 1  #  'Circle Equation
plt.contour(X, Y, F, [0], colors = 'k', linestyles = 'solid')
plt.show()
Run Code Online (Sandbox Code Playgroud)

更多相关信息:http : //courses.csail.mit.edu/6.867/wiki/images/3/3f/Plot-python.pdf