MatLab:对数z轴和bar3的奇怪显示

时间:2014-05-23 08:25:41

标签: matlab histogram matlab-figure logarithm

我想使用bar3绘图显示三维直方图。使用相对于x轴,y轴和z轴的线性标度给出以下结果:

Plot with linear z-axis

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

enter image description here

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

这是一个相当常见的问题,Matlab中的log轴具有非标准绘图功能或对图的修改,例如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-1范围内bar3范围内的值效果不佳,因为情节被反转而且负面导致问题log在任何一种情况下都需要进一步变换。但是,如果查看给出的图中的数据,这应该不是问题。