Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用matplotlib绘制方程_Python_Matplotlib - Fatal编程技术网

Python 用matplotlib绘制方程

Python 用matplotlib绘制方程,python,matplotlib,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() 当我尝试调用它时,会发生以下错误,我相信它正在尝试在到达y=formula之前执行乘法 graph(x**3

我正试着做一个函数,它可以画出我告诉它的任何公式

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  
图形(x**3+2*x-4,范围(-10,11))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
图(x**3+2*x-4,范围(-10,11))
名称错误:未定义名称“x”

你的猜测是对的:代码试图立即计算
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))

您可以查看
np.arange
(允许非整数增量)和
np.linspace
,而不是
range
,后者允许您指定要使用的起点、终点和点数。

这是因为

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))

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


关于它的更多信息:

这里根本不需要使用eval,而且它还增加了额外的开销,感谢您工作完美。可能是这样,但不知道如何取消字符串。有任何方法可以将交互式图形输出为.html,就像jupyter笔记本一样,我想制作一个.html文件供人们使用。这是7年后的事了,但我希望你能回答。在“graph”函数中,当您键入“y=formula(x)”时,它是如何工作的?在函数内部,公式(它是一个对象吗?)和my_公式相同,因为这是我们给图的参数“公式”的“值”?谢谢..@thenac-你可能已经自己弄明白了,不过这和你说的一模一样。这将适用于您定义的任何函数并与之匹配:假设my_公式(x)将被定义为cos(x),那么在调用graph(my_公式…)时,确实会在您定义的范围特定项下生成cos(x)公式的图形。我希望这能满足你的要求。
graph('x**3+2*x-4', range(-10, 11))
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()