首页 > 解决方案 > 在 Matplotlib 图上打印指数方程

问题描述

我觉得这是一个非常愚蠢的问题,但是经过一个小时的搜索后它是如此愚蠢,我没有找到关于如何做我想做的事情的示例或解释!

简单地说,我有一个方程 y = a*x^b,其中我通过曲线拟合将 a 和 b 的值放在名为 param 的列表中(即 a = param[0] 和 b = param[1])方法。我想把它打印到我的图上,这样我就可以得到拟合曲线的方程,就像 Excel 那样!这是我还没有的:

fig, ax = plt.subplots()
ax.loglog(xdata,ydata, 'ro', color='red', label='Original Data')
ax.loglog(xdata,ans, '--', color='blue', label='Fitted curve')

ax.text(xdata.mean,ydata.mean,r'$param[0]*x^param[1]$')

ax.set(xlabel='1/dX', ylabel='Erreur L2', title='Erreur L2 en fonction du raffinement')

ax.grid(True)
ax.legend()

哪个有效,直到我调用fig.save ()它返回一堆错误的地方,因为它不喜欢ax.text“设置”的部分

我试过玩这个,但仍然存在同样的问题:

(注意,这里func是我用来获取拟合参数的定义函数)

tex = sym.latex(func('x',*param).replace('$',''))
ax.title(r'$f(x) = %s$' %(tex), fontsize=16)

和/或

x = sym.symbols('x')
equation = sym.printing.latex(param[0]*x**{param[1]})

我尝试过的任何组合都没有奏效,我真的迷路了。对此的任何投入将不胜感激!:) 谢谢!

标签: pythonpython-3.xmatplotlibsympy

解决方案


从你的错误代码和你的代码

ax.loglog(xdata,ydata, 'ro', color='red', label='Original Data')
ax.loglog(xdata,ans, '--', color='blue', label='Fitted curve')

ax.text(xdata.mean,ydata.mean,r'$param[0]*x^param[1]$')

TypeError:float() 参数必须是字符串或数字,而不是 'builtin_function_or_method'

看起来您应该替换xdata.meanxdata.mean()ydata 并对其执行相同的操作。假设 xdata、ydata 等都是 numpy 数组。

错误代码表示您传递的是方法本身,而不是方法的结果。

在单独的说明中,plot.text需要前两个输入的坐标(因此,除非您打算将平均值作为方程式显示的位置),请参阅此处的帮助

matplotlib.pyplot.text

matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=, **kwargs)[来源]

向坐标区添加文本。

将文本 s 添加到数据坐标中位置 x、y 的坐标区。

考虑改成ax.text(xdata.mean(),ydata.mean(),r'$param[0]*x^param[1]$')类似ax.text(0,1,f'{xdata.mean()}*x^{ydata.mean()}')


推荐阅读