如何解决MATLAB中bar3图更新ZData时的数组形状错误?
解决MATLAB中bar3图更新ZData时的形状不匹配问题
问题原因
bar3函数返回的不是单个图形对象,而是与输入数据列数相同的Surface对象数组。每个Surface的ZData是三维数组(用于描述柱状条的三维表面结构),而非和输入矩阵一样的二维结构。直接将二维的z_new赋值给这些Surface的ZData,会因形状不匹配触发错误。
解决方案
遍历每个Surface对象,保留原ZData的结构,仅替换对应柱状条的高度数值:
z = [[1, 2]; [3, 4]]; z_new = [[1, 2]; [3, 3]]; h = bar3(z); % 逐个更新每个柱状条对应的Surface for i = 1:length(h) % 获取当前Surface的ZData结构 current_zdata = h(i).ZData; % 定位ZData中对应柱状条高度的行(非零行,即柱子的有效高度部分) height_rows = any(current_zdata ~= 0, 2); % 替换为新数据的对应列 current_zdata(height_rows, :) = z_new(:, i); % 更新ZData属性 set(h(i), 'ZData', current_zdata); end
补充说明
- 不同MATLAB版本中,
bar3生成的ZData结构可能略有差异,若上述索引方式不生效,可先通过size(h(1).ZData)查看具体形状,再调整替换逻辑。 - 如果不需要保留原有绘图的其他属性(如颜色、位置),也可以直接删除原对象后重新绘制:
delete(h); h = bar3(z_new);
内容的提问来源于stack exchange,提问作者haifisch123
相关产品推荐
相关产品推荐

