How to assign diffrent colors and shapes to diffirent groups in a plot?
4 views (last 30 days)
Show older comments
Zhe Dong
on 25 Dec 2023
Commented: Zhe Dong
on 26 Dec 2023
Hello, I'm trying to make a plot containing multiple groups, and each group has multiple values, but I don't know how to give different groups different colors and shapes
here's an example of my code, in this case I want to assign diffirent colors and shaples to different groups (A,B,C,D,E).
Many thanks!
clear;clc;close all;
Group = {'A','B','C','D','E'};
C3 = cellstr(Group); % convert cell to string
C4 = categorical(C3);% convert string to categorical
a = [1; 2; 3]; b = [4; 5; 6]; c = [6; 7; 8]; d = [9; 10; 11]; e = [12;13; 14];
data=[a,b,c,d,e];
plot(data, C4, 'LineStyle','none', 'Marker','o');
2 Comments
Voss
on 25 Dec 2023
cellstr does nothing in that case, since Group is already a cell array of character vectors.
Group = {'A','B','C','D','E'};
C3 = cellstr(Group);
isequal(C3,Group)
Accepted Answer
Sulaymon Eshkabilov
on 25 Dec 2023
Is this what you wanted to achieve:
clearvars;clc;close all;
Group = {'A','B','C','D','E'};
C3 = cellstr(Group); % convert cell to string
C4 = categorical(C3);% convert string to categorical
a = [1; 2; 3]; b = [4; 5; 6]; c = [6; 7; 8]; d = [9; 10; 11]; e = [12;13; 14];
data=[a,b,c,d,e];
MT = {'d', 'o', 's', 'p', '^'};
MC = {'r', 'g', 'b', 'c', 'm'};
MFC = {'r', 'g', 'b', 'c', 'm'};
for ii=1:numel(C4)
plot(data(:,ii), C4(ii), strcat(MT{ii}, MC{ii})); hold all
end
9 Comments
More Answers (1)
Dyuman Joshi
on 25 Dec 2023
Edited: Dyuman Joshi
on 25 Dec 2023
Group = {'A','B','C','D','E'};
%You can convert to categorical directly, cellstr is redundant
C4 = categorical(Group)
a = [1; 2; 3]; b = [4; 5; 6]; c = [6; 7; 8]; d = [9; 10; 11]; e = [12;13; 14];
data=[a,b,c,d,e];
%Number of groups
s = numel(C4);
%Select colors for each group from a colormap
colors = hsv(s);
%Define symbols for each group
symbols = 'o.xd*';
%The symbols are respectively - circle dot cross diamond star/asterik
gscatter(data.', C4, C4, colors, symbols, 8, 'doleg', 'off')
4 Comments
Dyuman Joshi
on 25 Dec 2023
Yes, you can -
Group = {'A','B','C','D','E'};
%You can convert to categorical directly, cellstr is redundant
C4 = categorical(Group)
a = [1; 2; 3]; b = [4; 5; 6]; c = [6; 7; 8]; d = [9; 10; 11]; e = [12;13; 14];
data=[a,b,c,d,e];
%Number of groups
s = numel(C4);
%Define colors manually
colors = [1 0 0; 0 1 0; 0 0 1; 1 0 1; 0 1 1];
%Define symbols for each group
symbols = 'o.xd*';
%The symbols are respectively - circle dot cross diamond star/asterik
gscatter(data.', C4, C4, colors, symbols, 8, 'doleg', 'off')
See Also
Categories
Find more on Data Distribution Plots 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!