绘制指数函数python

时间:2016-06-29 03:36:21

标签: python matplotlib

在尝试绘制指数函数时,我得到一个线性图:

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

1 个答案:

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

结果:

enter image description here