绘制指数函数python

Pri*_*e P 3 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))
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么? 输出图像

jua*_*aga 5

你真的不应该使用 EVAL。然而,抛开这个问题不谈,问题是您传递两个值的元组作为 x_range 参数的参数。x这是用值创建 a 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)
Run Code Online (Sandbox Code Playgroud)

但说真的,为什么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))
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述