在尝试绘制指数函数时,我得到一个线性图:
import math
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)
graph('100*(np.power(0.8, x))', (0,100))
我做错了什么?
output_image
答案 0 :(得分:3)
你真的不应该使用EVAL。但是,抛开该问题,问题是您传递的是两个值的元组作为x_range参数的参数。这是创建x
,其值为array([ 0, 100])
,如果您创建相应的y,则只有两个点,所以当然你会得到一条线。您想使用np.arange
代替np.array
。但是,如果将元组传递给graph
函数,则需要在将元组传递给np.arange.
时将其解包。所以这应该有效:
def graph(formula, x_range):
x = np.arange(*x_range)
y = eval(formula)
plt.plot(x, y)
但是,严重的是,为什么不通过函数来代替eval
?
def graph(func, x_range):
x = np.arange(*x_range)
y = func(x)
plt.plot(x, y)
graph(lambda x: 100*(np.power(0.8, x)), (0,100))
结果: