I get a linear graph when trying to plot exponential function:
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))
what am I doing wrong? output_image
You really should NOT BE USING EVAL. However, leaving that issue aside, the problem is you are passing a tuple of two values as the argument for the x_range parameter. This is creating a x
with the value: array([ 0, 100])
, and if you create the corresponding y's, you'll only have two points so of course you'll get a line. You want to use np.arange
instead of np.array
. However, if you pass a tuple to your graph
function you are going to need to unpack the tuple when you pass it to np.arange.
So this should work:
def graph(formula, x_range):
x = np.arange(*x_range)
y = eval(formula)
plt.plot(x, y)
Seriously, though, instead of eval
why not just pass a function?
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))
Results:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.