2016-08-10 3 views
2

in Matlab Versionen vor 2014 konnte ich das darunter liegende Bild im colorbar ändern, indem Sie folgendermaßen vorgehen:Manipulieren zugrunde liegende Bilddaten von colorbar in 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]) 

Dies war nützlich, wenn Sie eine benutzerdefinierte colormap anzuzeigen wollten die ist z 2D (NxMx3) anstelle der normalen 1D (Nx3). Wie kann das in Versionen nach 2014 gemacht werden, wo das zugrundeliegende Bild der Farbleiste nicht mehr zugänglich ist, hat es laut Dokumentation keine Kinder mehr.

Beispiel (Farbwert wird als mit einer zB Geschwindigkeit (y-Achsen-color) und die Beschleunigung (x-Achsen-color) interpretiert):

enter image description here

+0

Was, wie. Was? Kannst du ein Bild zeigen, wie es aussehen würde wie ein MxNx2 Colobar? Mein Gehirn sieht nicht, wie das funktionieren könnte –

+0

Kannst du ein Bild von dem, was du meinst, posten? – Dan

+0

Beispiel hinzugefügt @Dan – thorsan

Antwort

1

Basierend auf den Ideen in den OP vorgeschlagenen

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 

Das Ergebnis ist: Kommentare, ich habe mit etwas kommen

enter image description here

Die "falsche" Farbleiste bewegt sich an die richtige Stelle, wenn sich die Größe der Figur ändert. Beim Speichern der Figur erscheint die alte Farbleiste, dies geschieht auch nach dem Herauszoomen (und wahrscheinlich nach einigen anderen Aktionen). Um dies zu beseitigen, müsste man etwas mehr hacken ...

Getestet auf MATLAB R2016a.

+0

Danke, dies ist eine mögliche Lösung, um eine benutzerdefinierte Farbleiste zu erstellen, ich habe eine Lösung wie diese für Matlab <2014. Sie könnten die Farbleiste auch auf unsichtbar setzen, cb.Visible = 'off' – thorsan

+0

@thorsan 'cb.Visible = ' aus '; 'entfernt die Zahlen, nein? –

+0

Ja, aber ich würde benutzerdefinierte Zahlen auf der Bildachse setzen, aber das könnte natürlich auch auf der Farbbalkenachse eingestellt werden – thorsan

Verwandte Themen