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.

2 Ansichten (letzte 30 Tage)
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"

Antworten (1)

Voss
Voss am 7 Mai 2024
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;

Kategorien

Mehr zu Line Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by