2016-08-10 11 views
2

В версии MatLab до 2014 года, я мог бы изменить базовый образ в Colorbar, выполнив следующие действия:Манипулирование основные данные изображения Colorbar в 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 года, когда базовое изображение цветной панели больше не доступно, у нее нет детей в соответствии с документацией.

Пример (значение цвета интерпретируется как наличие, например, скорость (ось у-цвет) и ускорение (ось х-цвета)):

enter image description here

+0

Что, как. что? Можете ли вы показать изображение того, как он будет выглядеть как colobar MxNx2? Мой мозг не видит, как это может работать –

+0

Можете ли вы опубликовать изображение того, что вы имеете в виду? – Dan

+0

Добавлен пример @Dan – thorsan

ответ

1

На основе идей, предложенных в ОП комментарии, я придумал то:

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 

результат является:

enter image description here

«Поддельный» цветной барабан перемещается в нужное место по мере изменения размера фигуры. При сохранении фигуры появляется старая панель цветов, это также происходит после масштабирования (и, вероятно, после некоторых других действий). Избавление от этого потребует дополнительного взлома ...

Протестировано на MATLAB R2016a.

+0

Спасибо, это возможное решение для создания пользовательского colorbar, у меня есть такое решение для Matlab <2014. Вы также можете установить цветную панель в невидимую, cb.Visible = 'off' – thorsan

+0

@thorsan 'cb.Visible = ' off '; 'удаляет числа, нет? –

+0

Да, но я бы установил пользовательские номера на оси изображения, но это тоже можно было бы установить на оси цветной панели – thorsan