Mam wykres typu:Jak colorbar dotyczą markerów w 3D działki, a nie powierzchni w Matlab
Stworzyłem czarny-biały powierzchnię używając surf
- funkcja i znaczniki, które wykreśliłem przy użyciu funkcji plot3
. Dla każdego markera zdefiniowałem colormap pomiędzy czerwono-żółtozielonym, w zależności od wartości markera. Jak widać z wykresu, colorbar
odnosi się w tej chwili do powierzchni, ale chciałbym, aby odnosiło się do znaczników. Jak mogę to zrobić?
Dziękujemy!
Oto MWE zasadzie pokazując to, co robię teraz:
% 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
Dobrą praktyką jest dołączenie [mcve] do stackoverlfow. –
Zgadzam się, nadchodzi :) – jjepsuomi
Czy można przypisać znaczniki do mapy kolorów osi (tutaj skala szarości)? Jeśli tak, możesz użyć tekstury na powierzchni, aby wyglądać jak colormap ... – Crowley