运行时
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轴设置为对数刻度,那么棒的主体就会消失......
为什么会这样?
答案 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,因此某些条形向下延伸,但当然可以通过匹配方式选择数据和基线来避免这种情况。