ho una trama del seguente tipo:Come fare colorbar riferimento ai marcatori in 3D-plot e non la superficie in Matlab
ho creato la superficie nero-bianco con il surf
- funzione e i marker che ho tracciato usando la funzione plot3
. Per ciascun marker ho definito una mappa colori tra Rosso-Giallo-Verde a seconda del valore del marcatore. Come puoi vedere dalla trama il colorbar
si riferisce al momento alla superficie, ma mi piacerebbe che si riferisse ai marcatori. Come posso fare questo?
Grazie!
Qui è MWE fondamentalmente mostrando quello che faccio ora:
% Plot the surface with a colormap
Z = peaks;
Z = peaks./max(Z(:));
Z = (Z+1)*3/2;
surf(Z)
colormap(flipud(gray))
shading interp
hold on
% Create the 4-dimensional marker data
x = (50-10).*rand(50,1) + 10;
y = (50-10).*rand(50,1) + 10;
z = (3-1).*rand(50,1) + 1;
q = 5.*rand(50,1); % This dimension is used to select the color
% Create the color map for the markers
c1=[0 1 0]; %G
c2=[1 1 0]; %Y
c3=[1 0 0]; %R
n1 = 20;
n2 = 20;
cmap=[linspace(c1(1),c2(1),n1);linspace(c1(2),c2(2),n1);linspace(c1(3),c2(3),n1)];
cmap(:,end+1:end+n2)=[linspace(c2(1),c3(1),n2);linspace(c2(2),c3(2),n2);linspace(c2(3),c3(3),n2)];
cmap = cmap';
% Select the colors for the markers
marker_colors = zeros(size(50, 1), 3);
q_interval = max(q)-min(q);
q_int = q_interval/(n1+n2);
q_vals = zeros(n1+n2,1);
q_vals(1) = min(q);
for i = 2:size(q_vals,1)
q_vals(i) = min(q) + (i-1)*q_int;
end
for i = 1:50
d = abs(q_vals - q(i));
ind = find(d == min(d));
marker_colors(i,:) = cmap(ind,:);
% Plot the marker
plot3(x(i), y(i), z(i), 'o', 'color', [0 0 0], 'MarkerFaceColor', marker_colors(i,:))
end
% Lastly I plot the colorbar, which refers to the surface... :/
colorbar
È una buona pratica includere un [mcve] in stackoverlfow. –
Roger, arrivando :) – jjepsuomi
Puoi assegnare marcatori alla mappa colori degli assi (qui in scala di grigi)? Se è così, puoi usare la texture sulla superficie per assomigliare a una mappa di colori ... – Crowley