How to make a scatter plot where each point is colored according to a given ID and the xlabel ticks are determined by the associated string.

1 次查看(过去 30 天)
The data I am trying to plot is in an Nx3 table where the label for each columns are 'Value', 'Condition' and 'ID'. I want to plot the values in 'Value', group them according to 'Condition' and color them based on 'ID' so something like swarmchart I guess I am trying to do.
To get something to work with, this is an example of how my data could look like. How do I plot this?
Value Condition ID
----------------------------- ---- -------
0.0608000000000000 'B' "ID 1"
0.0476000000000000 'B' "ID 2"
0.0483000000000000 'B' "ID 3"
0.298800000000000 'B' "ID 4"
0.0377000000000000 'B' "ID 5"

回答(1 个)

Voss
Voss 2024-5-7
Here's one way:
% random data in a table
N = 1000;
Value = randn(N,1);
Condition = char(randi(4,N,1)+64);
ID = "ID "+randi(9,N,1);
T = table(Value,Condition,ID)
T = 1000x3 table
Value Condition ID _________ _________ ______ -2.2255 A "ID 7" -0.098719 B "ID 5" -2.473 B "ID 4" 1.3498 B "ID 3" 0.6995 A "ID 9" -0.48031 A "ID 6" 0.38059 C "ID 6" 1.5143 B "ID 9" -1.7896 C "ID 5" 0.55064 D "ID 6" 0.27981 B "ID 3" 1.5408 D "ID 1" 0.0011779 D "ID 5" 0.71058 D "ID 9" -0.90439 C "ID 8" -0.79044 C "ID 1"
% do the grouping and swarmchart plotting
[idxC,CG] = findgroups(T.Condition);
[idxID,IDG] = findgroups(T.ID);
NC = numel(CG);
NID = numel(IDG);
figure('Colormap',turbo(NID))
hold on
for ii = 1:NC
idx = idxC == ii;
x = ii*ones(nnz(idx),1);
y = T.Value(idx);
c = idxID(idx);
swarmchart(x,y,[],c,'.')
end
xlim([0 NC+1])
xticks(1:NC)
xticklabels(CG)
cb = colorbar();
y = linspace(1,NID,NID+1);
cb.YTick = (y(1:end-1)+y(2:end))/2;
cb.YTickLabel = IDG;

类别

Help CenterFile Exchange 中查找有关 Grid Lines, Tick Values, and Labels 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by