简单的matplotlib问题-变量不起作用



为什么这不起作用?

import matplotlib.pyplot as plt
import numpy as np
f1 = input ('funcao1: ')
f2 = input ('funcao2: ')
x = np.linspace(-3, 3)
plt.plot(x, f1)
plt.plot(x, f2)
plt.show()

当我将f1和f2更改为函数本身时,它就起作用了。当我替换输入变量时,没有。错误:

funcao1: x**2
funcao2: x+2
Traceback (most recent call last)
File "capitao.py", line 8, in <module>
plt.plot(x, funcao1)
File "C:UsersMeanaconda3libsite-packagesmatplotlibpyplot.py", line 2840, in plot    
return gca().plot(
File "C:UsersMeanaconda3libsite-packagesmatplotlibaxes_axes.py", line 1743, in plot 
lines = [*self._get_lines(*args, data=data, **kwargs)]
File "C:UsersMeanaconda3libsite-packagesmatplotlibaxes_base.py", line 273, in __call__
yield from self._plot_args(this, kwargs)
File "C:UsersMeanaconda3libsite-packagesmatplotlibaxes_base.py", line 369, in _plot_args
linestyle, marker, color = _process_plot_format(tup[-1])
File "C:UsersMeanaconda3libsite-packagesmatplotlibaxes_base.py", line 146, in _process_plot_format
raise ValueError(
ValueError: Illegal format string "x**2"; two marker symbols

使用input((函数时,变量f1只是一个字符串。要将其评估为python表达式,必须使用eval((命令,如下所示:

f1 = eval(f1)

因此,您的代码应该如下所示:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3)
f1 = input ('funcao1: ')
f2 = input ('funcao2: ')
f1 = eval(f1)
f2 = eval(f2)
plt.plot(x, f1)
plt.plot(x, f2)
plt.show()