2015-02-06 63 views
1

在干图上,如何添加具有相同值x但具有不同y值的点?如何将两个具有相同x值但不同y值的散点相加?

例如,假设下面的代码:

x = [1 2 3 6 6 4 5]; 
y = [3 6 1 8 9 4 2]; 
stem(x,y); 

如果您绘制xy,这将是输出:

enter image description here

我想加起来(6,8)(6,9)所以它就变成了(6,17),就像图片显示的一样。

我该如何做到这一点?

+0

您的输入数据与您的图形不匹配。特别是'X'和'Y'有不同的长度。你不能使用具有不同长度向量的'stem'。 – rayryeng 2015-02-06 06:48:43

+0

对不起,我已经编辑y – matlabnewbie 2015-02-06 06:52:55

回答

2

使用accumarrayxy这样你就可以垃圾桶或类似组一起条目共享相同x。一旦这些值分组后,您可以将共享同一个分栏的所有值相加在一起。因此,我们看到对于x = 6,我们有y = 8y = 9accumarray允许您将多个共享相同xy值组合在一起。一旦将这些值分组后,您就可以对同一组中的所有值应用函数,以便为每个组生成最终输出。在我们的例子中,我们要总结他们,所以我们需要使用sum功能:

x = [1 2 3 6 6 4 5]; 
y = [3 6 1 8 9 4 2]; 
Z = accumarray(x(:), y(:), [], @sum); 
stem(unique(x), Z); 
xlim([0 7]); 

我们对X使用unique,使我们有没有重复的X绘制stem情节时。 unique也有排序您的x值的行为。做x(:)y(:)这样就可以让你的输入数据独立地作为行或列向量。 accumarray只接受向量(或矩阵,但我们不会去那里),所以这样做x(:)y(:)确保两个输入都是列向量。

我们得到:

enter image description here

上面的代码假定x整数,并在1开始。如果没有,则使用的unique第三输出到每个号码分配一个唯一的ID,然后通过accumarray运行。完成后,请使用accumarray之类的输出:

[xu,~,id] = unique(x); 
Z = accumarray(id, y(:), [], @sum); 
stem(xu, Z); 
+1

非常感谢你,先生:) – matlabnewbie 2015-02-06 07:42:56

+0

嗨,你可以在java的netbean呢? – matlabnewbie 2015-02-07 10:37:27

相关问题