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

如何用MATLAB绘制示例图样式的多组3D直方图?bar3/histogram2不适用

解决方案

方法1:手动偏移分组的bar3实现多组3D直方图

当bar3默认的分组模式无法满足需求时,可通过手动设置每组数据的x轴偏移,让不同组的直方图在空间上独立排列,避免重叠或堆叠。

示例代码:

% 生成模拟数据:3组,每组4个类别,每个类别对应5个统计值
group1 = rand(4,5);
group2 = rand(4,5) + 0.2;
group3 = rand(4,5) - 0.1;

% 设置组间偏移量,控制分组间距
offset = 0.8;
x1 = 1:size(group1,1);
x2 = x1 + offset;
x3 = x1 + 2*offset;

figure;
hold on;

% 分别绘制每组直方图,设置柱子宽度和颜色
bar3(x1, group1, 0.7, 'FaceColor', [0.2 0.6 0.8]);
bar3(x2, group2, 0.7, 'FaceColor', [0.8 0.3 0.3]);
bar3(x3, group3, 0.7, 'FaceColor', [0.3 0.8 0.3]);

% 配置轴标签与图例
xlabel('类别');
ylabel('数据维度');
zlabel('统计值');
legend('组1', '组2', '组3', 'Location', 'best');

% 调整x轴刻度,清晰区分分组
xticks([mean(x1) mean(x2) mean(x3)]);
xticklabels({'类别组A', '类别组B', '类别组C'});

grid on;
hold off;

方法2:自定义patch对象实现精细化控制

如果需要更灵活的样式(比如自定义柱子形状、间距),可以直接通过patch对象手动构建每个柱子,完全掌控直方图的布局。

示例代码:

% 模拟数据:2组,每组3个类别,每个类别对应一个统计值
data = [2.1 3.5 1.8; 2.8 4.2 2.5];
groups = size(data,1);
categories = size(data,2);

% 设置柱子尺寸与间距参数
bar_width = 0.3;
bar_depth = 0.3;
group_gap = 0.5;
category_gap = 0.5;

figure;
hold on;

% 定义每组的颜色
colors = [[0.2 0.6 0.8], [0.8 0.3 0.3]];

for g = 1:groups
    for c = 1:categories
        % 计算柱子中心坐标
        x = (g-1)*(bar_width + group_gap) + bar_width/2;
        y = (c-1)*(bar_depth + category_gap) + bar_depth/2;
        z = data(g,c);
        
        % 定义柱子的8个顶点坐标
        vertices = [
            x-bar_width/2, y-bar_depth/2, 0;
            x+bar_width/2, y-bar_depth/2, 0;
            x+bar_width/2, y+bar_depth/2, 0;
            x-bar_width/2, y+bar_depth/2, 0;
            x-bar_width/2, y-bar_depth/2, z;
            x+bar_width/2, y-bar_depth/2, z;
            x+bar_width/2, y+bar_depth/2, z;
            x-bar_width/2, y+bar_depth/2, z;
        ];
        
        % 定义柱子的面索引(对应顶点顺序)
        faces = [
            1 2 3 4; % 底面
            5 6 7 8; % 顶面
            1 2 6 5; % 前面
            2 3 7 6; % 右面
            3 4 8 7; % 后面
            4 1 5 8; % 左面
        ];
        
        % 绘制柱子
        patch('Vertices', vertices, 'Faces', faces, 'FaceColor', colors(:,g), 'EdgeColor', 'k');
    end
end

% 配置轴标签与刻度
xlabel('分组');
ylabel('类别');
zlabel('统计值');
xticks(1:groups);
xticklabels({'组1', '组2'});
yticks(1:categories);
yticklabels({'类别1', '类别2', '类别3'});

axis tight;
grid on;
hold off;

补充说明

  • bar3默认的grouped模式会将同类别不同组的柱子放在同一x位置,容易出现视觉混淆,手动偏移x坐标可解决该问题。
  • histogram2仅用于绘制二维数据的频数分布,无法直接实现多组独立的统计类3D直方图,因此不适用此类需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:07:53