【问题标题】:MatLab: Weird display of logarithmic z-axis and bar3MatLab:对数 z 轴和 bar3 的奇怪显示
【发布时间】:2014-05-23 08:25:40
【问题描述】:

我想使用bar3plot 显示一个 3d 直方图。使用相对于 x 轴、y 轴和 z 轴的线性标度可得出以下结果:

但是,由于 z 值的间隔非常大,我想使用对数 z 轴,这样较低的 z 值也可见。但是,使用set(gca, 'ZScale', 'log'); 将 z 轴设置为对数会产生以下图,看起来不太好:

我需要设置一些额外的选项还是已知的错误?

提前致谢!

【问题讨论】:

  • 我敢打赌,您的数据中有 0、NaN 甚至负值。能否给一个小样本连同相应的图?
  • 你应该检查你的z-data。例如。使用 if-cases 检查 NaN 的 0 和负值。因为log(-x)= a +b*i 是复数,所以log(NaN)=NaNlog(0)=-infinity。不知道为什么 matlab 会说最后一部分。

标签: matlab histogram matlab-figure logarithm


【解决方案1】:

这是在 Matlab 中使用非标准绘图功能或对绘图进行修改的对数轴相当常见的问题,例如 trying to use transparency with log axis

问题

bar3 生成的绘图需要doesn't support logarithmic axis 的OpenGL 渲染器。

解决方案

通过转换数据和设置刻度线/标签来模拟日志轴

以下创建带有对数轴的绘图以获取刻度线和标签,清除轴然后再次开始绘制带有转换后的刻度线和标签的数据的日志。

bar3(Z);
set(gca,'Zscale','log')
ticks=get(gca,'Ztick');
ticklabel=str2num(get(gca,'ZtickLabel'));
set(gca,'Zscale','linear')
cla

bar3(log(Z));
set(gca,'Ztick',log(ticks));set(gca,'ZtickLabel',10.^ticklabel)

只有刻度标签的格式会丢失。

此方法不适用于0-1bar3 范围内的值,因为图是倒置的,并且在任何一种情况下都需要进一步转换,因此log 的负数会导致问题。但是,鉴于这应该不是问题。

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2019-07-12
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多