运行时
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,所以一些条形向下延伸,当然这可以通过以匹配的方式选择数据和基线来避免。
关于matlab - bar3 仅显示顶面,使用对数刻度时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28793119/