如何在MATLAB同一figure中同时显示fitlm模型图与系数表?
MATLAB线性模型图与系数表同屏显示解决方案
报错原因
你遇到的报错是MATLAB的组件使用限制:uitable属于App Designer专属的UI组件,只能在UIFigure(App Designer创建的窗口)中使用,无法直接嵌入用figure()创建的普通Figure的subplot里。
需求可以实现,两种可行方案
方案一:在普通Figure中用文本绘制系数表
如果不想用App Designer,可以把系数表转换成文本格式,手动绘制在子图区域,模拟表格效果:
% 1. 构建示例线性模型(替换成你的数据和模型) load carbig; mdl = fitlm(Horsepower, MPG); % 2. 创建Figure并分栏 fig = figure('Position', [100,100,1000,500]); % 子图1:绘制模型图 subplot(1,2,1); plot(mdl); title('线性模型诊断图'); % 子图2:绘制系数表格 subplot(1,2,2); ax = gca; ax.Visible = 'off'; % 隐藏默认坐标轴 % 把系数表转为带表头的单元格数组 coeff_data = table2cell(mdl.Coefficients); coeff_table = [{'参数'}, {'估计值'}, {'标准误差'}, {'t统计量'}, {'p值'}; coeff_data]; row_cnt = size(coeff_table,1); col_cnt = size(coeff_table,2); % 计算每个单元格的位置(归一化坐标) x = linspace(0.1, 0.9, col_cnt); y = linspace(0.9, 0.1, row_cnt); % 逐个绘制单元格文本 for i = 1:row_cnt for j = 1:col_cnt text(x(j), y(i), coeff_table{i,j}, ... 'HorizontalAlignment','center', ... 'VerticalAlignment','middle', ... 'Parent', ax); end end % 绘制表格边框 annotation(fig, 'rectangle', [0.52, 0.05, 0.45, 0.9], 'Color','k'); % 绘制竖线分隔列 for j = 1:col_cnt-1 line_x = 0.52 + 0.45*(x(j)+x(j+1))/2; annotation(fig, 'line', [line_x, line_x], [0.05, 0.95], 'Color','k'); end % 绘制横线分隔行 for i = 1:row_cnt-1 line_y = 0.05 + 0.9*(y(i)+y(i+1))/2; annotation(fig, 'line', [0.52, 0.97], [line_y, line_y], 'Color','k'); end title(ax, '模型系数表');
方案二:用App Designer创建UIFigure(更规范)
如果接受用App Designer,这是最适配的方式:
- 打开App Designer,新建一个空白App
- 在画布上添加一个
UIAxes(用于显示模型图)和一个UITable(用于显示系数表),调整布局为左右分栏 - 在
startupFcn回调中添加代码:
function startupFcn(app) % 替换成你的模型构建代码 load carbig; mdl = fitlm(Horsepower, MPG); % 在UIAxes中绘制模型图 plot(app.UIAxes, mdl); app.UIAxes.Title.String = '线性模型诊断图'; % 在UITable中加载系数表 app.UITable.Data = mdl.Coefficients; % 可选:设置表格列宽自适应 app.UITable.ColumnWidth = {'auto'}; end
运行App后,就能在同一个窗口中同时看到模型图和系数表。
总结
普通Figure确实无法嵌入uitable,这是MATLAB的组件架构限制,但通过上述两种方法,完全可以实现把模型图和系数表同屏显示的需求。
内容的提问来源于stack exchange,提问作者user2587726
相关产品推荐
相关产品推荐

