具有彩色组和组内不同标记的散点图
Scatter plot with coloured groups and different markers within a group
我正在尝试绘制不同组的散点图。除此之外,我想为每组 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
对 Db
和 Sw
对 Dw
的散点图。但现在我希望他们有不同的标记,以便 Sb
/Db
点有一个 'x' 和 Sw
/Dw
点有一个 'o'.
然后另外我想用一条线将它们连接起来,所以例如 Sb
/Db
的第一个元素应该与 Sw
/[= 的第一个元素连接15=]。
像这样的东西(在这个例子中用图形编辑器编辑...)
我试过 gscatter
gscatter([Db(:)' Dw(:)'],[Sb(:)' Sw(:)'],[1:16 1:16])
但是我不知道如何更改标记或添加行。
有人可以帮我解决这个问题吗?
您可以通过多次调用 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
输出:
你可以通过多次调用 line
而不是使用 scatter
来获得每对不同的颜色,指定两个调用的标记但只使用 start/end 点, 将另一个替换为 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
输出:
请注意,这使用默认颜色集。这可以通过使用
来改变
set(gca, 'colororder', mycolours)
其中 mycolours
是一个 3 列 RGB 矩阵,如您使用 get(gca, 'colororder')
.
所见
我正在尝试绘制不同组的散点图。除此之外,我想为每组 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
对 Db
和 Sw
对 Dw
的散点图。但现在我希望他们有不同的标记,以便 Sb
/Db
点有一个 'x' 和 Sw
/Dw
点有一个 'o'.
然后另外我想用一条线将它们连接起来,所以例如 Sb
/Db
的第一个元素应该与 Sw
/[= 的第一个元素连接15=]。
像这样的东西(在这个例子中用图形编辑器编辑...)
我试过 gscatter
gscatter([Db(:)' Dw(:)'],[Sb(:)' Sw(:)'],[1:16 1:16])
但是我不知道如何更改标记或添加行。
有人可以帮我解决这个问题吗?
您可以通过多次调用 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
输出:
你可以通过多次调用 line
而不是使用 scatter
来获得每对不同的颜色,指定两个调用的标记但只使用 start/end 点, 将另一个替换为 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
输出:
请注意,这使用默认颜色集。这可以通过使用
来改变set(gca, 'colororder', mycolours)
其中 mycolours
是一个 3 列 RGB 矩阵,如您使用 get(gca, 'colororder')
.