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

标签 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

为什么会这样?

最佳答案

正如 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/

相关文章:

r - 如何在R中绘制函数曲线

r - 带对数刻度的 geom_raster 插值

r - 绘制 XTS 对象时的变化

c++ - 如果 Matlab 以 GUI 启动,如何从 MEX 文件中检查

r - 图中的分页符(新页面)

r - 如何显示保存的树状图对象?包括 MWE?

c++ - 相当于 C++ 的 MATLAB 函数 resample

matlab - 除了通过 mex 文件 mexAtExit 处理程序之外,我是否可以检测 MATLAB 终止?

matlab - 在 Matlab 中读取一个大的结构化文件

c++ - c++ opencv中的等效matlab代码