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
結果は次のとおりです。
Figure のサイズが変化すると、「偽の」カラーバーが正しい位置に移動します。Figure を保存すると、古いカラー バーが表示されます。これは、ズーム アウトした後も発生します (おそらく他の操作を行った後)。これを取り除くには、追加のハッキングが必要になります...
MATLAB R2016a でテスト済み。