在2014年之前的matlab版本中,我可以通过执行以下操作来更改颜色栏中的基础图像:
cmap = ... % something which is MxNx3
colormap(reshape(cmap, [N*M,3]))
cmapIxs2D = reshape((1:(N*M))', [N, M]);
ax = colorbar('peer', gca);
set(get(ax, 'Children'), 'CData', cmapIxs2D);
ylim(ch, [0 255]), xlim(ch, [0 1])
如果你想显示一个自定义色彩图,这个很有用。 2D(NxMx3)而不是正常的1D(Nx3)。如何才能在2014年之后的版本中完成,其中颜色条的基础图像不再可访问,根据文档它没有子项。
示例(颜色值被解释为具有例如速度(y轴颜色)和加速度(x轴颜色)):
答案 0 :(得分:1)
根据OP评论中提出的想法,我提出 :
function q38871518
%% Plot something random:
hF = figure('Color',0.4*[1 1 1],'SizeChangedFcn',@recolorCB); membrane;
hTmp = gca;
% Compute the fake colorbar contents:
cm = bsxfun(@times,permute(colormap,[1,3,2]),0:0.01:1); % figure(); imagesc(cm);
% Create an axes to hold the fake colorbar
hAx = axes(hF); imagesc(hAx,cm); axis(hAx,'off');
function recolorCB(varargin)
drawnow;
if exist('cb','var')
cb.Face.Texture.CData(:) = 0;
% "Link" the 'Position' prop between the colorbar and the fake colorbar:
hAx.Position = cb.Position;
end
end
% Create the real colorbar
cb = colorbar(hTmp,'Color',[1 1 1]);
% Synchronize positions:
hAx.Position = cb.Position;
% Make sure the fake colorbar is at the bottom, so we can see the values clearly
uistack(hAx,'bottom');
% Final touch-ups:
drawnow; cb.Face.Texture.CData(:) = 0; cb.Face.Texture.ColorType = 'truecoloralpha';
end
结果是:
"假"当图形大小改变时,colorbar移动到正确的位置。保存图形时,会出现旧的颜色条,这也会在缩小后发生(并且可能会执行其他一些操作)。摆脱这个需要一些额外的黑客......
在MATLAB R2016a上测试。