我正在尝试使用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'
参数不再存在。
有什么想法吗?
非常感谢。
答案 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)
我们得到:
答案 1 :(得分:0)
MATLAB forum中的类似问题。
要点:您可以获取caxis
并修改log
值:
caxis(log([c(1) c(length(c))]));
colorbar('FontSize',11,'YTick',log(c),'YTickLabel',c);