How to plot number of a matrix with colorcode?

1 view (last 30 days)
A matrix with dimension 2193 * 2, where 1st column is depth and 2nd column is number ( 1 to 6). I want to plot these number with specific color like 1 is green, 2 is black, 3 is cyan, 4 is red, 5 is blue, and 6 is yellow. How to plot it with specific color against depth. Please, help me with useful information. thanks
  2 Comments
DGM
DGM on 16 Dec 2021
Edited: DGM on 16 Dec 2021
What exactly do you want? When you say "plot it with specific color against depth", you realize that the result for each category will be constant-valued, right?
A = xlsread('Book1.xlsx');
scatter(A(:,1),A(:,2),10,A(:,2))
cmap = [0 1 0; 0 0 0; 0 1 1; 1 0 0; 0 0 1; 1 1 0];
colormap(cmap)
I'm assuming you want something other than this. Maybe something like this?
figure;
A = xlsread('Book1.xlsx');
idx = 1:size(A,1);
uv = unique(A(:,2));
hold on
for k = 1:numel(uv)
mask = A(:,2) == uv(k);
plot(idx(mask),A(mask,1),'o');
end
cmap = [0 1 0; 0 0 0; 0 1 1; 1 0 0; 0 0 1; 1 1 0];
set(gca,'colororder',cmap)
Not that I think that's particularly readable either.
AS
AS on 16 Dec 2021
thank you for your answer. But I want to plot these number with depth value (1st column). Depth will be in Y-axis. And the numbers will be plotted as color.

Sign in to comment.

Accepted Answer

DGM
DGM on 16 Dec 2021
Edited: DGM on 16 Dec 2021
You can use pcolor()
A = xlsread('Book1.xlsx');
w = 100;
h = pcolor(1:w,A(:,1),repmat(A(:,2),[1 w]));
set(h,'edgecolor','none')
set(gca,'ydir','reverse','xticklabel',{})
axis equal
xlim([1 w])
cmap = [0 1 0; 0 0 0; 0 1 1; 1 0 0; 0 0 1; 1 1 0];
colormap(cmap)
Something like that?
  3 Comments
DGM
DGM on 16 Dec 2021
w sets the width of the plot box in data units. You can adjust it to make the plot wider or narrower.

Sign in to comment.

More Answers (3)

Walter Roberson
Walter Roberson on 16 Dec 2021
Edited: Walter Roberson on 16 Dec 2021
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/835655/Book1.xlsx';
A = readmatrix(filename);
N = size(A,1);
pointsize = 25;
cmap = [0 1 0; 0 0 0; 0 1 1; 1 0 0; 0 0 1; 1 1 0];
scatter(1:N, A(:,1), pointsize, A(:,2));
colormap(cmap);
colorbar()
ylabel('Depth')
xlabel('row number')
scatter(A(:,2), A(:,1), pointsize, A(:,2))
colormap(cmap)
xlabel('category')
ylabel('Depth')
boxplot(A(:,1), A(:,2))
xlabel('category')
ylabel('depth')

DGM
DGM on 16 Dec 2021
Edited: DGM on 16 Dec 2021
Here's my latest guess:
A = xlsread('Book1.xlsx');
uv = unique(A(:,2));
hold on
for k = 1:numel(uv)
mask = A(:,2) == uv(k);
plot(A(mask,1));
end
cmap = [0 1 0; 0 0 0; 0 1 1; 1 0 0; 0 0 1; 1 1 0];
set(gca,'colororder',cmap)
ylabel('depth')
xlabel('sample number')
Here, depth is plotted against the number of each sample in the respective categories. If depth is plotted against the sample number across all categories (i.e. the row subscript), then the result is the same as Walter's first example and the second example I gave.

AS
AS on 16 Dec 2021
Thanks everyone for your responses. But, I want to plot it using imagesc coomand. I have plotted it and unable to mention specific colorcode of mine. Like ike 1 is green, 2 is black, 3 is cyan, 4 is red, 5 is blue, and 6 is yellow. Kindly, help me to sove this.

Categories

Find more on Graphics Performance in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!