当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)
答案 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')
这将保留对数刻度轴刻度线和标签。