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

Matlab中在网格上绘制堆叠3D柱状图的技术问题

嘿,这个需求其实完全可以通过手动指定每个堆叠柱的位置来实现,我给你整理了清晰的实现思路和代码示例:

核心思路

Matlab 默认的 bar3(A,'stacked') 会把所有50个堆叠柱排成一行,我们要做的就是把每个柱子(对应矩阵A的每一行)分配到5×10的网格坐标上,手动指定每个柱子的X(横向列)和Y(纵向行)位置,再逐个绘制堆叠柱,最后统一调整布局样式。

完整实现代码

这里先模拟生成50行4列的示例矩阵,你可以直接替换成自己的矩阵A:

% 模拟生成50行4列的整数矩阵(替换成你的A即可)
A = randi([1, 15], 50, 4);

% 定义网格的行数和列数
grid_rows = 5;
grid_cols = 10;

% 创建图形窗口并开启hold模式,方便逐个绘制柱子
figure;
hold on;

% 遍历矩阵的每一行(每个堆叠柱)
for idx = 1:size(A, 1)
    % 计算当前柱子在网格中的位置:行号和列号
    % 第idx个柱子,行号是ceil(idx/10),列号是mod(idx-1,10)+1,完全符合你的要求
    current_row = ceil(idx / grid_cols);
    current_col = mod(idx - 1, grid_cols) + 1;
    
    % 绘制当前行的堆叠3D柱状图,指定X=current_col,Y=current_row,对应网格位置
    bar3(current_col, current_row, A(idx, :), 'stacked');
end

% 调整坐标轴和标签,让布局更清晰直观
xlabel('横向网格列');
ylabel('纵向网格行');
zlabel('数值');
xticks(1:grid_cols);  % 显示1到10的横向刻度
yticks(1:grid_rows); % 显示1到5的纵向刻度
title('5×10网格布局的堆叠3D柱状图');

% 关闭hold模式
hold off;
关键细节解释
  • 位置计算:current_row = ceil(idx/10) 会把每10个柱子分到下一行,比如第11个柱子(idx=11),ceil(11/10)=2,对应第2行;current_col = mod(idx-1,10)+1 则是循环分配1到10的列号,idx=11时 mod(10,10)+1=1,对应第1列,完美匹配你要的布局。
  • 逐个绘制:开启 hold on 后,每次调用 bar3 都会在当前图上叠加绘制,指定X和Y坐标就能把每个堆叠柱放到对应的网格点上。
  • 样式调整:你可以根据需要添加 'Width' 参数调整柱子宽度,比如 bar3(..., 'Width', 0.7),避免柱子过于拥挤;也可以用 colormap 设置堆叠层的颜色方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:17:52