首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用matplotlib绘制方程式

用matplotlib绘制方程式
EN

Stack Overflow用户
提问于 2012-12-22 14:22:49
回答 3查看 108.7K关注 0票数 38

我正在尝试创建一个函数,它将为我告诉它的任何公式绘制图形。

代码语言:javascript
复制
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之前尝试做乘法。

代码语言:javascript
复制
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  
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-22 14:37:52

这是因为在队列中

代码语言:javascript
复制
graph(x**3+2*x-4, range(-10, 11))

未定义X。

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

因此,您的代码只需进行最少的修改即可

代码语言:javascript
复制
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()

你可以这样叫它

代码语言:javascript
复制
graph('x**3+2*x-4', range(-10, 11))
票数 31
EN

Stack Overflow用户

发布于 2012-12-22 14:32:17

您的猜测是对的:代码正在尝试立即计算x**3+2*x-4。不幸的是,你不能真正阻止它这样做。好消息是,在Python中,函数是一级对象,我的意思是,您可以像对待任何其他变量一样对待它们。因此,要修复您的函数,我们可以这样做:

代码语言:javascript
复制
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

代码语言:javascript
复制
graph(lambda x: x**3+2*x-4, range(-10, 11))

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

票数 73
EN

Stack Overflow用户

发布于 2017-12-20 05:50:59

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

代码语言:javascript
复制
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()

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14000595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档