隐藏/删除bar3 log ZScale中零值的条形图

时间:2013-08-05 11:35:12

标签: matlab matlab-figure

当z值为0并且具有log ZScale时,绘图将被错误地渲染。这是连贯的,因为log10(0)= -inf。

示例:

Y = cool(7);
bar3(Y)
set(gca,'ZScale','log')

但是如何从情节中删除这个0条?

Mathworks提供的解决方案  (http://www.mathworks.nl/support/solutions/en/data/1-2VFT6X/?product=ML&solution=1-2VFT6X) 如下:

Y = cool(7);
bar3(Y)
set(gca,'ZScale','log')

llim = .1;
h = get(gca,'Children');
for i = 1:length(h)
    ZData = get(h(i), 'ZData');
    ZData(ZData==0) = llim;
    set(h(i), 'ZData', ZData);
end

此解决方案将0值替换为0.1(然后是log10(0.1)= -1),但我想删除0条,而不是绘制-1条。

此外,我尝试设置为NaN全0值How to hide zero values in bar3 plot in MATLAB,但将ZScale设置为日志并不喜欢它。

有什么建议吗?

提前致谢

修改 我看到的最简单的解决方案是手动应用对数刻度:

Y = cool(7);    
Y = log10(Y);
Y(Y==-inf)=NaN; 
bar3(Y)

1 个答案:

答案 0 :(得分:0)

如果您可以使用0.1替换log z值,则可以将所有零值替换为10 ^ 0.1,因此在记录时,它们将变为0.1。

所以,

Y = cool(7);
Y(Y==0) = 10^0.1;
bar3(Y)
set(gca,'ZScale','log')

这将保留对数刻度轴刻度线和标签。