问题
I am trying to make kind of a scatter plot with different groups. In addition to this I would like to have 2 different markers and one color for each set of 2 points, which are also connected with a line. But see below for details
I have 4 matrices
Db = [0.4745 0.3886 0.3316 0.2742; 0.5195 0.3825 0.3341 0.2846; 0.4929 0.3951 0.3161 0.2918; 0.4905 0.4052 0.3240 0.2882];
Dw = [0.4814 0.3905 0.3418 0.2922; 0.5258 0.3952 0.3420 0.2974; 0.4945 0.4012 0.3386 0.3001; 0.4885 0.4076 0.3382 0.3056];
Sb = [0.0476 0.0527 0.0543 0.0592; 0.0432 0.0503 0.0521 0.0592; 0.0460 0.0531 0.0536 0.0508; 0.0488 0.0520 0.0542 0.0543];
Sw = [0.0693 0.0738 0.0785 0.0839; 0.0642 0.0731 0.0763 0.0862; 0.0670 0.0755 0.0807 0.0753; 0.0744 0.0733 0.0792 0.0776];
I would like to plot them as a scatter plot with Sb
against Db
and Sw
against Dw
. But now I would like them to have different markers so that the Sb
/Db
points have an 'x' and Sw
/Dw
points have an 'o'.
Then additionally I want to connect them with a line, so for example the first element of Sb
/Db
should be connected with the first element of Sw
/Dw
.
Something like this (edited in a graphics editor for this example...)
I have tried with gscatter
gscatter([Db(:)' Dw(:)'],[Sb(:)' Sw(:)'],[1:16 1:16])
But with this I don't know how to change the markers or add lines.
Can someone help me with this?
回答1:
You can do this with a couple of calls to scatter
and one call to line
.
% Turn your data into 1D row vectors
vDb = Db(:).'; vDw = Dw(:).'; vSb = Sb(:).'; vSw = Sw(:).';
% Plotting
figure; hold on
% Scatters for points
scatter(vDb, vSb, 'kx'); % plotting with black (k) crosses (x)
scatter(vDw, vSw, 'ko'); % plotting with black (k) circles (o)
% Line to get lines!
line([vDb; vDw], [vSb; vSw], 'color', 'k') % Plot black (k) lines between 'b' and 'w' pts
Output:
You can get different colours per pair by just using multiple calls to line
instead of using scatter
, specifying the markers for two of the calls but only using the start/end points, replacing the other with NaN
.
% No need for 'hold on' as line doesn't clear the plot!
figure;
line([vDb; NaN.*vDw], [vSb; NaN.*vSw], 'marker', 'x') % Plot coloured x markers
line([NaN.*vDb; vDw], [NaN.*vSb; vSw], 'marker', 'o') % Plot coloured o markers
line([vDb; vDw], [vSb; vSw]) % Plot coloured lines between 'b' and 'w' pts
Output:
Note that this uses the default colour set. This can be changed by using
set(gca, 'colororder', mycolours)
where mycolours
is a 3 column RGB matrix, as seen if you use get(gca, 'colororder')
.
来源:https://stackoverflow.com/questions/46148753/scatter-plot-with-coloured-groups-and-different-markers-within-a-group