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

时间:2015-03-01 11:42:16

标签: matlab plot

运行时

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
事情很顺利

enter image description here

但是如果我在行中注释,它将Z轴设置为对数刻度,那么棒的主体就会消失......

enter image description here

为什么会这样?

1 个答案:

答案 0 :(得分:3)

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

绘制数据后

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,因此某些条形向下延伸,但当然可以通过匹配方式选择数据和基线来避免这种情况。