1

当 z 值为 0 且对数 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 条。

我还尝试将所有 0 值设置为 NaN如何在 MATLAB 中的 bar3 图中隐藏零值但将 ZScale 设置为 log 不喜欢它。

有什么建议吗?

提前致谢

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

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

1 回答 1

0

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

所以,

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

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

于 2013-08-21T23:37:37.700 回答