带有彩色组和组内不同标记的散点图

时间:2017-09-11 05:31:31

标签: matlab plot lines scatter

我正试图用不同的群体制作散点图。除此之外,我希望每组2个点有2个不同的标记和一种颜色,它们也用一条线连接。但请参阅下面的详细信息

我有4个矩阵

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];

我想将它们绘制为散布图,Sb针对DbSw针对Dw。但现在我希望他们有不同的标记,以便Sb / Db点有一个' x'并且Sw / Dw点有一个' o。

Basically I would like to have the lower bunch of points as 'x' and the upper ones as 'o'

然后另外我想用一行连接它们,所以例如Sb / Db的第一个元素应该与Sw / {{1}的第一个元素相连接}。

像这样的东西(在这个例子的图形编辑器中编辑......)

connect points with lines

我尝试了Dw

gscatter

但有了这个,我不知道如何更改标记或添加线条。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:5)

您可以通过拨打scatter和拨打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 

输出:

plot

只需使用line的多次调用,而不是使用scatter,指定两个调用的标记,但仅使用开始/结束点,替换另一个,您可以为每对获得不同的颜色与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

输出:

plot2

请注意,这使用默认颜色集。可以使用

更改此设置
set(gca, 'colororder', mycolours)

其中mycolours是一个3列RGB矩阵,如果您使用get(gca, 'colororder')就会看到。