对于31 x 3 2d阵列,按行分组的散点图

时间:2013-07-09 16:26:35

标签: matlab

我有一个二维数组,我想分散绘制按行分组的点,这样每行都有一个不同的符号。这是我的代码到目前为止,所有的点都是相同的符号,所以我不知道哪些点是哪一行的一部分。

a = zeros (31,3);
for k = 0:30
    y = 5*k
    dent = [1 10 10 y]
    a(k+1, [1 2 3]) = roots(dent)
end

t = 1:3


gscatter(real(a(:,t)),imag(a(:,t)));

1 个答案:

答案 0 :(得分:1)

您不需要循环,可以使用gscatter选项:

a = zeros (31,3);
for k = 0:30
    y = 5*k;
    dent = [1 10 10 y];
    a(k+1, [1 2 3]) = roots(dent);
end

group = ones(size(a));
group(:,1) = group(:,1).*0;
group(:,3) = group(:,3).*2;

gscatter(real(a(:)),imag(a(:)),group(:),'brg','xo+');

您需要一个额外的向量group,其中包含有关数据集中哪些点属于特定组的信息。此变量非常通用,请参阅it's documentation 在您的情况下,我建议在第一列中设置0的矩阵,在第二列中设置1,在第三列中设置2
gscatter函数调用中,使用(:)将所有矩阵重塑为向量(因为gscatter仅适用于向量。
其他两个字符串传递给gscatter

  • 'brg'
  • 'xo+'

分别确定符号的颜色和形状。你的情节看起来像这样:

gscatter

编辑

对于那些无法访问gscatter功能的用户,可以使用scatter来完成此操作:

s = 40;
hold on
COLORS='brg';
SYMBOLS='xo+';
for t=1:size(a,2)
    scatter(real(a(:,t)),imag(a(:,t)),s,SYMBOLS(t),'MarkerEdgeColor',COLORS(t))
end
hold off

需要注意的一些事项:

  • 要以这种方式使用,scatter需要一个符号大小,在此示例中设置为s = 40
  • 符号存储在string变量中,以便可以在循环中调用。
  • 边缘颜色也是如此(也可以指定面部颜色,查看scatter documentation
  • 在循环中调用时,使用hold绘制到相同的图中(粗略地说)

这是标准scatter图的输出:

scatter