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