如何使用Matlab R2015a显示对数刻度色条?

时间:2017-07-30 09:48:33

标签: matlab matlab-figure surface colorbar

我正在尝试使用Matlab中的函数surf显示3D绘图,我需要它在z轴的对数刻度。所以这就是我在做的事情:

surf(X,Y,Z)
set(gca,'zscale','log')

但我希望colorbar以对数刻度显示,标签为10 ^( - 6),10 ^( - 5),10 ^( - 4),......

查一下,我发现了解决方案

h = colorbar
set(h,'YScale','log')

但它没有使用最新版本的Matlab,因为'YScale'参数不再存在。

有什么想法吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

即使您可以将颜色条轴和标签更改为对数刻度,您的数据仍然不是对数刻度,因此颜色条看起来很奇怪。为了解决这个问题,我可以建议另一个虚拟轴来固定彩条。方法如下:

让我们说你这样做:

[X,Y,Z] = peaks(50);
s = surf(X,Y,Z);
set(gca,'zscale','log')
h = colorbar;

我们的下一步是在插入颜色条后获取轴位置(以备将来使用):

axpos = s.Parent.Position;

现在我们创建新轴,隐藏它们,并在第一个轴的相同位置添加一个颜色条:

axes;
axis off
cb = colorbar('Position',h.Position);

接下来,我们将colobar轴调整为绘图中显示的值(因为Z<=0未显示):

caxis(log10([min(Z(Z>0)) max(Z(:))]))

我们将colorbar ticks标签更改为对数刻度格式:

cb.TickLabels = sprintf('10^{%1.1f}\n',cb.Ticks);

最后,我们删除第一个颜色条,并将轴位置设置回axpos

delete(h)
set(s.Parent,'Position',axpos)

我们得到:

enter image description here

答案 1 :(得分:0)

MATLAB forum中的类似问题。

要点:您可以获取caxis并修改log值:

caxis(log([c(1) c(length(c))]));
colorbar('FontSize',11,'YTick',log(c),'YTickLabel',c);