How do I assign certain colours to different sections of a 3plot?

1 view (last 30 days)
I have a 4 column matrix. The first column is assigned a number, 99,104 or 115 and the last three columns represents a position x,y,z in a 3D space. Each number in the first column represents a colour, 99-green, 104-red and 115-blue. How could I plot this 3D data with respect to the assigned colours?

Accepted Answer

Walter Roberson
Walter Roberson on 13 Apr 2016
cmap = zeros(115,3);
cmap(99,:) = [0 1 0]; %99 is green
cmap(104,:) = [1 0 0]; %104 is red
cmap(115,:) = [0 0 1]; %115 is blue
pointsize = 40;
scatter3(YourMatrix(:,2), YourMatrix(:,3), YourMatrix(:,4), pointsize, YourMatrix(:,1));
colormap(cmap);
caxis([1,115])
This makes use of the fact that your particular values are small positive integers, and uses them as indices into a colormap that has been created to have the desired colors at those values. Then it says to map "1" to the bottom color, "115" to the top color -- essentially mapping 1 to 1 for the 115 entry color map.
  7 Comments
shellmcg
shellmcg on 21 Apr 2016
Edited: Walter Roberson on 21 Apr 2016
HI Walter,
I have written the following script using the your color mapping to plot the data in sections of color but am getting errors. any suggestions?
for i=1:length(YourMatrix);
start=1;
if YourMatrix(i,1)~= YourMatrix(i+1,1)
plot3(YourMatrix(:,2),YourMatrix(:,3),YourMatrix(:,4),'color',YourMatrix(:,1));
colormap(cmap);
start=i+1;
end
end
Walter Roberson
Walter Roberson on 21 Apr 2016
Edited: Walter Roberson on 21 Apr 2016
codes = [inf; YourMatrix(:,1); -inf]);
breakpoints = find(diff(codes));
breakpoints(end) = breakpoints(end)-1; %reaches one past end
for K = 1 : length(breakpoints)-1
startpos = breakpoints(K);
endpos = breakpoints(K+1);
plot3(YourMatrix(startpos:endpos, 2), YourMatrix(startpos:endpos, 3), YourMatrix(startpos:endpos, 4), 'color', YourMatrix(startpos,1) );
hold on
end
hold off
colormap(cmap);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!