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

MATLAB多级分组柱状图制作及分组标签个性化设置技术问询

实现MATLAB多级分组柱状图并添加自定义分组标签

没问题!我帮你搞定这个MATLAB多级分组柱状图,还能轻松给分组加上你要的前缀后缀(比如0.5h、1000℃、5%),同时满足显示“AR”字符的需求。下面是完整的实现步骤和代码:

1. 数据准备与自定义标签设置

首先把你提供的数据导入MATLAB,转换成表格格式方便处理,同时给各级分组加上你需要的前缀/后缀:

% 导入原始数据
data = [
    "AR", 1100, 0.5, 2;
    "AR", 1100, 1, 3;
    "5", 1000, 0.5, 4;
    "5", 1000, 1, 5;
    "5", 1050, 0.5, 4;
    "5", 1050, 1, 5;
    "5", 1100, 0.5, 4;
    "5", 1100, 1, 5;
    "15", 1000, 0.5, 4;
    "15", 1000, 1, 5;
    "15", 1050, 0.5, 4;
    "15", 1050, 1, 5;
    "15", 1100, 0.5, 4;
    "15", 1100, 1, 5;
];

% 转换为table格式,便于分组操作
tbl = table(data(:,1), str2double(data(:,2)), str2double(data(:,3)), str2double(data(:,4)), ...
    'VariableNames', {'Col1', 'Col2', 'Col3', 'Col4'});

% 给分组添加自定义前缀/后缀
col1_labels = replace(tbl.Col1, ["5", "15"], ["5%", "15%"]); % 给5、15添加%后缀
col2_labels = string(tbl.Col2) + "℃"; % 给温度值添加℃后缀
col3_labels = string(tbl.Col3) + "h"; % 给时间值添加h后缀

2. 计算多级分组的柱子位置

因为是三级分组(Col1→Col2→Col3),我们需要给不同层级的分组设置不同间距,让图表结构更清晰:

% 获取各级分组的唯一值
unique_col1 = unique(tbl.Col1);
unique_col2 = unique(tbl.Col2);
unique_col3 = unique(tbl.Col3);

% 定义间距参数(可根据需求调整)
group_gap = 2;        % 第一级大分组之间的间距
subgroup_gap = 0.5;   % 第二级子分组之间的间距
bar_width = 0.4;      % 单根柱子的宽度

% 计算每个柱子的X轴位置
x_pos = [];
current_x = 1;
for i = 1:length(unique_col1)
    col1_val = unique_col1(i);
    % 获取当前第一级分组下的所有第二级分组
    col2_subset = unique(tbl.Col2(tbl.Col1 == col1_val));
    for j = 1:length(col2_subset)
        col2_val = col2_subset(j);
        % 获取当前第二级分组下的所有第三级分组
        col3_subset = unique(tbl.Col3(tbl.Col1 == col1_val & tbl.Col2 == col2_val));
        for k = 1:length(col3_subset)
            x_pos = [x_pos, current_x + (k-1)*(bar_width + 0.1)];
        end
        current_x = current_x + length(col3_subset)*(bar_width + 0.1) + subgroup_gap;
    end
    current_x = current_x + group_gap;
end

3. 绘制柱状图并添加标签

现在绘制柱子,然后依次添加三级分组的标签,最后在图中添加“AR”字符:

% 创建画布,设置合适大小
figure('Position', [100, 100, 1000, 600]);
bar(x_pos, tbl.Col4, bar_width, 'EdgeColor', 'black');
hold on;

% 添加第三级分组标签(0.5h、1h)
xticks(x_pos);
xticklabels(col3_labels);

% 添加第二级分组标题(1000℃、1050℃、1100℃)
second_level_x = [];
current_x = 1 + (length(unique_col3)-1)*(bar_width + 0.1)/2;
for i = 1:length(unique_col1)
    col1_val = unique_col1(i);
    col2_subset = unique(tbl.Col2(tbl.Col1 == col1_val));
    for j = 1:length(col2_subset)
        second_level_x = [second_level_x, current_x];
        current_x = current_x + length(col3_subset)*(bar_width + 0.1) + subgroup_gap;
    end
    current_x = current_x + group_gap;
end
text(second_level_x, zeros(size(second_level_x))-0.3, string(unique_col2)' + "℃", ...
    'HorizontalAlignment', 'center', 'FontSize', 10);

% 添加第一级分组标题(AR、5%、15%)
first_level_x = [];
current_x = 1 + (length(col2_subset)*length(unique_col3)*(bar_width + 0.1) + (length(col2_subset)-1)*subgroup_gap)/2;
for i = 1:length(unique_col1)
    first_level_x = [first_level_x, current_x];
    current_x = current_x + length(col2_subset)*length(unique_col3)*(bar_width + 0.1) + (length(col2_subset)-1)*subgroup_gap + group_gap;
end
text(first_level_x, zeros(size(first_level_x))-0.6, replace(unique_col1, ["5", "15"], ["5%", "15%"]), ...
    'HorizontalAlignment', 'center', 'FontSize', 12, 'FontWeight', 'bold');

% 在图中添加"AR"字符(位置可根据需求调整)
text(max(x_pos)-2, max(tbl.Col4)+0.5, 'AR', 'FontSize', 14, 'FontWeight', 'bold', 'Color', 'red');

% 设置图表其他属性
ylabel('柱高数值', 'FontSize', 12);
title('多级分组柱状图', 'FontSize', 14);
ylim([0, max(tbl.Col4)+1]); % 调整Y轴范围,避免标签被遮挡
grid on;
hold off;

自定义调整说明

  • 如果需要修改前缀/后缀,只需要调整col1_labels、col2_labels、col3_labels的生成规则即可,比如把"5%"改成"5wt%"完全没问题。
  • 分组间距、柱子宽度可以通过修改group_gap、subgroup_gap、bar_width参数来调整,让图表布局更符合你的需求。
  • “AR”字符的位置可以通过修改text函数的前两个参数(X、Y坐标)来调整。

内容的提问来源于stack exchange,提问作者Vijay Bharadwaj J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:08:43