如何用代码替换MATLAB fitlm绘图图例中的*为乘号×
问题
我正在使用MATLAB的fitlm函数分析测试数据,调用plot(mdl)生成的图例会自动显示线性模型方程,形式为:
y = m*x+c
我需要将其中的星号*替换为Unicode编码U00D7的乘号×,使方程变为:
y = m × x+c
询问是否可以通过代码实现该替换,还是必须手动修改,附带测试代码如下:
clear clc %生成测试数据 %---------------------------- x1 = 1:0.01:3; r = -1 + (1+1)*rand(1,201); x1 = x1 + r; y1 = 1:0.01:3; r = -1 + (1+1)*rand(1,201); y1 = y1 + r; x1 = x1'; y1 = y1'; label1 = zeros(length(y1),1); Tclust1 = [label1,x1,y1]; %---------------------------- x2 = 4:0.01:6; r = -1 + (1+1)*rand(1,201); x2 = x2 + r; y2 = 10:0.01:12; r = -1 + (1+1)*rand(1,201); y2 = y2 + r; x2 = x2'; y2 = y2'; label2 = ones(length(y2),1); Tclust2 = [label2,x2,y2]; %---------------------------- x3 = 5:0.01:7; r = -1 + (1+1)*rand(1,201); x3 = x3 + r; y3 = 11:0.01:13; r = -1 + (1+1)*rand(1,201); y3 = y3 + r; x3 = x3'; y3 = y3'; label3 = label2+1; Tclust3 = [label3,x3,y3]; %---------------------------- T = [Tclust1;Tclust2;Tclust3]; %线性模型准备工作 ------------------------------------------------------------- %按标签分类 Label_idx = zeros(length(T(:,1)),1); for qq = 1:length(Label_idx) if T(qq,1) > 0 Label_idx(qq) = 1; end end for qq = 1:length(Label_idx) if T(qq,1) > 1 Label_idx(qq) = 2; end end %生成虚拟变量 for qq = 1:length(Label_idx) if Label_idx(qq) == 0 Label_1(qq) = 1; else Label_1(qq) = 0; end end Label_1 = Label_1'; for qq = 1:length(Label_idx) if Label_idx(qq) == 2 Label_2(qq) = 1; else Label_2(qq) = 0; end end Label_2 = Label_2'; %建立线性模型 ------------------------------------------------- %输入预测变量 pred = (T(:,2)); %输入响应变量 comp = (T(:,3)); %交互项参数 int_lo = pred.*Label_1; int_hi = pred.*Label_2; %构建预测矩阵 X = [pred,Label_1,Label_2,int_lo,int_hi]; LR_mdl = fitlm(X,comp); %绘图 ========================================================== plot(LR_mdl)
解决方案
可以通过代码自动替换图例中的乘号,无需手动修改。核心逻辑是获取绘图后的图例对象,提取文本内容并完成替换,再重新设置图例文本。
在调用plot(LR_mdl)之后,添加以下代码即可实现替换:
% 获取当前图形的图例对象 lgd = findobj(gcf, 'Type', 'Legend'); % 提取图例文本数组 legend_strings = lgd.String; % 将所有*替换为Unicode乘号×(U00D7) new_legend_strings = strrep(legend_strings, '*', char(0xD7)); % 更新图例文本 lgd.String = new_legend_strings;
完整修改后的代码
clear clc %生成测试数据 %---------------------------- x1 = 1:0.01:3; r = -1 + (1+1)*rand(1,201); x1 = x1 + r; y1 = 1:0.01:3; r = -1 + (1+1)*rand(1,201); y1 = y1 + r; x1 = x1'; y1 = y1'; label1 = zeros(length(y1),1); Tclust1 = [label1,x1,y1]; %---------------------------- x2 = 4:0.01:6; r = -1 + (1+1)*rand(1,201); x2 = x2 + r; y2 = 10:0.01:12; r = -1 + (1+1)*rand(1,201); y2 = y2 + r; x2 = x2'; y2 = y2'; label2 = ones(length(y2),1); Tclust2 = [label2,x2,y2]; %---------------------------- x3 = 5:0.01:7; r = -1 + (1+1)*rand(1,201); x3 = x3 + r; y3 = 11:0.01:13; r = -1 + (1+1)*rand(1,201); y3 = y3 + r; x3 = x3'; y3 = y3'; label3 = label2+1; Tclust3 = [label3,x3,y3]; %---------------------------- T = [Tclust1;Tclust2;Tclust3]; %线性模型准备工作 ------------------------------------------------------------- %按标签分类 Label_idx = zeros(length(T(:,1)),1); for qq = 1:length(Label_idx) if T(qq,1) > 0 Label_idx(qq) = 1; end end for qq = 1:length(Label_idx) if T(qq,1) > 1 Label_idx(qq) = 2; end end %生成虚拟变量 for qq = 1:length(Label_idx) if Label_idx(qq) == 0 Label_1(qq) = 1; else Label_1(qq) = 0; end end Label_1 = Label_1'; for qq = 1:length(Label_idx) if Label_idx(qq) == 2 Label_2(qq) = 1; else Label_2(qq) = 0; end end Label_2 = Label_2'; %建立线性模型 ------------------------------------------------- %输入预测变量 pred = (T(:,2)); %输入响应变量 comp = (T(:,3)); %交互项参数 int_lo = pred.*Label_1; int_hi = pred.*Label_2; %构建预测矩阵 X = [pred,Label_1,Label_2,int_lo,int_hi]; LR_mdl = fitlm(X,comp); %绘图 ========================================================== plot(LR_mdl) % 替换图例中的*为× lgd = findobj(gcf, 'Type', 'Legend'); legend_strings = lgd.String; new_legend_strings = strrep(legend_strings, '*', char(0xD7)); lgd.String = new_legend_strings;
内容的提问来源于stack exchange,提问作者user2587726
相关产品推荐
相关产品推荐

