python - 在 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]})
我尝试过的任何组合都没有奏效,我真的迷路了。对此的任何投入将不胜感激!:) 谢谢!
解决方案
从你的错误代码和你的代码
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.mean
为xdata.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()}')
推荐阅读
- regex - 正则表达式:如果第一个字母是 X,它应该以 A 或 B 结尾。我该怎么做?
- blazor - Blazor 自定义重新加载/连接丢失文本
- java - 无法放置墙标或编辑其文本
- sql-server - 比较两个表并仅返回具有不同值的行-根据建议编辑谢谢
- dialogflow-es - Google Dialogflow 是否支持视频?
- d3.js - 使用 d3 力(画布)附加新顶点和边时如何保持绘制顶点的位置?
- node.js - NodeJS Firebase 功能在部署后失败
- asp.net-core - Visual Studio 2019 测试失败,出现错误“System.ComponentModel.Win32Exception (0x80004005):此程序被组策略阻止
- python - 如何捕获检测到的物体 Yolov3 的图像并在烧瓶中显示
- reactjs - how to go to other page when 2 selected of selecbox checked in react?