bar3 仅显示顶面,使用对数刻度时

bar3 showing only top surface, when using log scale

当运行

hBar = bar3(rand(6,8));

%// set(gca,'Zscale','log')    % Problem when using log scale

for k = 1:length(hBar)
    zdata = hBar(k).ZData;
    hBar(k).CData = zdata;
    hBar(k).FaceColor = 'interp';
end

一切顺利

但是如果我在将 Z 轴设置为对数刻度的行中发表评论,则条形主体消失...

为什么会这样?

正如 thewaywewalk 所评论的那样,这不是开箱即用的原因是,这些条形图沿着 z 轴从 0 到给定值,并且对数刻度上的 0 无限远。 bar3 不提供指定除 0 以外的基线值的方法。但是,可以通过 hack 实现此目的。

绘制数据后

hBar = bar3(rand(6,8));

我们操纵 hBar 中返回的底层表面数据:

baseline = 0.1;
for i = 1 : numel(hBar)
    z = get(hBar(i), 'ZData');
    z(z == 0) = baseline;
    set(hBar(i), 'ZData', z)
end

此代码假定表面 ZData 中的每个精确 0 都指的是条的底部,并用第一行中选择的 baseline 替换该值。现在是对数尺度

set(gca,'Zscale','log')

提供有用的显示,例如:

因为一些rand值低于我们选择的基线0.1,所以一些条向下延伸,当然这可以通过以匹配的方式选择数据和基线来避免。