如何使用 Matlab R2015a 显示对数刻度颜色条?
How can I display a log scale colorbar with Matlab R2015a?
我正在尝试在 Matlab 中使用 surf 函数显示 3D 图,我需要它在 z 轴上采用对数刻度。所以这就是我正在做的事情:
surf(X,Y,Z)
set(gca,'zscale','log')
但我希望颜色条以对数标度显示,标签为 10^(-6)、10^(-5)、10^(-4)...
查了一下,找到了解决方法
h = colorbar
set(h,'YScale','log')
但它不适用于最新版本的 Matlab,因为 'YScale'
参数不再存在。
有什么想法吗?
非常感谢。
MATLAB forum 中的类似问题。
要点:您可以获得 caxis
并将其修改为 log
值:
caxis(log([c(1) c(length(c))]));
colorbar('FontSize',11,'YTick',log(c),'YTickLabel',c);
即使您可以将颜色条轴和标签更改为对数刻度,您的数据仍然不是对数刻度,因此颜色条会显得很奇怪。为了解决这个问题,我可以建议使用另一个虚拟轴来固定颜色条。方法如下:
假设你绘制了这个:
[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(:))]))
我们将颜色条刻度标签更改为对数刻度格式:
cb.TickLabels = sprintf('10^{%1.1f}\n',cb.Ticks);
最后,我们删除第一个颜色条,并将轴位置设置回axpos
:
delete(h)
set(s.Parent,'Position',axpos)
我们得到:
我正在尝试在 Matlab 中使用 surf 函数显示 3D 图,我需要它在 z 轴上采用对数刻度。所以这就是我正在做的事情:
surf(X,Y,Z)
set(gca,'zscale','log')
但我希望颜色条以对数标度显示,标签为 10^(-6)、10^(-5)、10^(-4)...
查了一下,找到了解决方法
h = colorbar
set(h,'YScale','log')
但它不适用于最新版本的 Matlab,因为 'YScale'
参数不再存在。
有什么想法吗?
非常感谢。
MATLAB forum 中的类似问题。
要点:您可以获得 caxis
并将其修改为 log
值:
caxis(log([c(1) c(length(c))]));
colorbar('FontSize',11,'YTick',log(c),'YTickLabel',c);
即使您可以将颜色条轴和标签更改为对数刻度,您的数据仍然不是对数刻度,因此颜色条会显得很奇怪。为了解决这个问题,我可以建议使用另一个虚拟轴来固定颜色条。方法如下:
假设你绘制了这个:
[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(:))]))
我们将颜色条刻度标签更改为对数刻度格式:
cb.TickLabels = sprintf('10^{%1.1f}\n',cb.Ticks);
最后,我们删除第一个颜色条,并将轴位置设置回axpos
:
delete(h)
set(s.Parent,'Position',axpos)
我们得到: