You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab绘图下方添加数据表?技术实现问询

在MATLAB绘图下方添加数据表的解决方案

嘿,我懂你现在的情况——已经完成了复合图的绘制,就差在图的下方加上类似Excel那样的数据表对吧?下面给你两种实用的实现方法,你可以根据自己的使用场景来选择:

方法一:使用uitable组件(适合GUI或交互式场景)

这种方法能直接在图窗里添加可交互的表格,操作起来也比较直观,步骤如下:

  1. 先跑完你的绘图代码,确保图窗已经创建好
  2. 获取当前图窗的位置,把表格定位到绘图区域的下方
  3. 准备好要展示的表格数据和列名,创建uitable组件

给你补充完整的示例代码:

% 你的原有绘图代码
y = [1,4; 0,0; 0,0; 1,0; 4,5; 21,10; 13,9; 3,3; 2,NaN; 0,NaN; 0,NaN; 1,NaN];
z = [16,34; 16,17; 26,17; 27,21; 42,37; 60,45; 45,47; 37,33; 28,NaN; 14,NaN; 16,NaN; 21,NaN];
z(z==0) = nan;
aa=max(y); P= max(aa); bb=max(z); q= max(bb);

figure; % 创建图窗
yyaxis left
a=bar(y,1); % 你的柱状图绘制(后续的右侧轴绘图可以按你原有代码补充)
yyaxis right
b=plot(z,'-o'); % 示例折线图,你可以替换成自己的绘图代码

% 准备表格数据:这里把y和z合并,你也可以按需调整
tableData = [y, z];
colNames = {'Y1', 'Y2', 'Z1', 'Z2'}; % 自定义列名,对应你的数据含义

% 获取当前图窗位置,设置表格的位置和大小
figPos = get(gcf,'Position');
% 让表格宽度和图窗一致,高度设为150,放在图窗底部
tablePos = [figPos(1), figPos(2)-160, figPos(3), 150];
uitable('Parent', gcf, 'Position', tablePos, 'Data', tableData, 'ColumnName', colNames);

% 调整绘图区域的位置,避免和表格重叠
ax = gca;
axPos = get(ax,'Position');
axPos(2) = axPos(2) + 160/figPos(4); % 上移绘图区域,给表格留出空间
set(ax,'Position',axPos);

方法二:使用text函数手动绘制表格(适合静态导出)

如果你只需要静态的表格,不需要交互功能,用text和rectangle手动绘制是更灵活的选择,导出图片时也不容易出问题:

% 先运行你的原有绘图代码,完成复合图绘制

% 准备表格的行列标签和数据
rowLabels = {'Row1','Row2','Row3','Row4','Row5','Row6','Row7','Row8','Row9','Row10','Row11','Row12'};
colLabels = {'Y1','Y2','Z1','Z2'};
tableData = [y,z];

% 设置表格的起始位置(用归一化坐标,0-1对应整个图窗的范围)
startX = 0.1; % 表格左侧的x坐标
startY = -0.2; % 表格底部的y坐标(负数表示在绘图区域下方)
cellWidth = 0.15; % 每个单元格的宽度
cellHeight = 0.05; % 每个单元格的高度

% 绘制列标签
for i = 1:length(colLabels)
    text(startX + (i-1)*cellWidth + cellWidth/2, startY + (size(tableData,1)+1)*cellHeight, ...
        colLabels{i}, 'HorizontalAlignment','center','VerticalAlignment','middle');
end

% 绘制行标签
for i = 1:length(rowLabels)
    text(startX - cellWidth/2, startY + (size(tableData,1)-i)*cellHeight + cellHeight/2, ...
        rowLabels{i}, 'HorizontalAlignment','center','VerticalAlignment','middle');
end

% 绘制单元格内容和边框
for row = 1:size(tableData,1)
    for col = 1:size(tableData,2)
        % 画单元格边框
        rectangle('Position',[startX + (col-1)*cellWidth, startY + (size(tableData,1)-row)*cellHeight, cellWidth, cellHeight],...
            'EdgeColor','k');
        % 处理NaN值,显示为空字符串
        val = tableData(row,col);
        txt = isnan(val) ? '' : num2str(val);
        % 写单元格内容
        text(startX + (col-1)*cellWidth + cellWidth/2, startY + (size(tableData,1)-row)*cellHeight + cellHeight/2,...
            txt, 'HorizontalAlignment','center','VerticalAlignment','middle');
    end
end

% 调整绘图区域的高度,给表格留出空间
ax = gca;
axPos = get(ax,'Position');
axPos(4) = 0.7; % 缩小绘图区域高度,下方预留表格位置
set(ax,'Position',axPos);

小提示

  • 两种方法都需要根据你的图窗大小、数据量调整位置参数,确保表格和绘图区域适配
  • 如果要导出带表格的图片,推荐用print命令,比如print(gcf,'my_plot.png','-dpng','-r300'),保证清晰度和完整性
  • 用uitable的时候,保存图片前最好先调整图窗大小,避免表格被截断

内容的提问来源于stack exchange,提问作者Rulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:16:46