Matlab中在fitlm生成的图形标题中添加带上角标r²值的问题求助
Matlab中在fitlm生成的图形标题中添加带上角标r²值的问题求助
嘿,我来帮你搞定这个问题!你遇到的情况我之前做线性建模可视化时也碰过——想把fitlm输出的R²值(2得是上标)加到图标题里,结果照着文档写的代码没达到效果,对吧?下面给你一步步捋清楚解决方案:
第一步:补全数据处理与线性模型拟合
先把你生成的两个簇数据合并,再用fitlm拟合模型,同时提取出我们需要的R²值:
% 合并两个簇的数据集 T = [Tclust1; Tclust2]; % 拟合线性模型(这里以y1为因变量、x1为自变量为例,可根据需求调整公式) lm_model = fitlm(T, 'y1 ~ x1'); % 提取普通R²值(如果需要调整后的R²,改用 lm_model.Rsquared.Adjusted) r_squared = lm_model.Rsquared.Ordinary;
第二步:两种方法实现带上角标的标题
Matlab里给文本加角标有两种常用的靠谱方式,你可以任选其一:
方法1:用TeX标记生成上标(Matlab图形默认支持)
Matlab的标题、坐标轴标签等文本对象默认支持TeX格式,用上标符号^就能把后面的字符变成上标,配合sprintf把数值和文本组合起来就搞定了:
% 绘制散点图+拟合线 scatter(T.x1, T.y1, 'filled', 'Alpha', 0.6); hold on; % 绘制拟合的回归线 plot(T.x1, lm_model.Fitted, 'r-', 'LineWidth', 1.5); hold off; % 设置带R²上标的标题,Interpreter参数确保TeX格式生效 title(sprintf('散点图与线性拟合 (r^2 = %.2f)', r_squared), 'Interpreter', 'TeX');
这里%.2f是保留两位小数,你可以改成%.3f或%.4f来调整精度。
方法2:直接用Unicode上标字符(更直观)
如果你觉得TeX标记有点麻烦,直接用Unicode的²字符就行,不用管解释器,代码更简洁:
% 绘图部分和上面一致,标题换成下面的写法 title(sprintf('散点图与线性拟合 (r² = %.2f)', r_squared));
这个方法在Matlab R2016及以后的版本都完美支持,显示效果和TeX方法完全一致。
为什么你之前的方法可能失效?
大概率是这两个原因:
- 没正确提取R²值:
fitlm的模型对象里,R²存在Rsquared.Ordinary或Rsquared.Adjusted属性里,别用错了属性名 - 没正确设置上标格式:如果只是直接把
r2和数值拼在一起,Matlab只会把它当成普通文本,必须用^(TeX模式)或者Unicode²才能让2变成上标
额外:给每个簇单独拟合加标题的示例
如果你是想给两个簇分别拟合并加标题,代码可以这么写:
% 处理第一个簇 lm_clust1 = fitlm(Tclust1, 'y1 ~ x1'); r2_clust1 = lm_clust1.Rsquared.Ordinary; figure('Name','簇1拟合结果'); scatter(Tclust1.x1, Tclust1.y1, 'filled'); hold on; plot(Tclust1.x1, lm_clust1.Fitted, 'r-'); title(sprintf('簇1线性拟合 (r^2 = %.2f)', r2_clust1), 'Interpreter', 'TeX'); hold off; % 处理第二个簇 lm_clust2 = fitlm(Tclust2, 'y2 ~ x2'); r2_clust2 = lm_clust2.Rsquared.Ordinary; figure('Name','簇2拟合结果'); scatter(Tclust2.x2, Tclust2.y2, 'filled'); hold on; plot(Tclust2.x2, lm_clust2.Fitted, 'r-'); title(sprintf('簇2线性拟合 (r^2 = %.2f)', r2_clust2), 'Interpreter', 'TeX'); hold off;
备注:内容来源于stack exchange,提问作者user2587726
相关产品推荐
相关产品推荐

