如何使用相同的x值但y的值不同来添加两个散点?

时间:2015-02-06 05:19:44

标签: matlab

在干线图上,如何添加具有相同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),就像图片所显示的那样。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

accumarrayxy一起使用,这样您就可以将共享相同x的相似条目分组或分组。将这些值分箱后,您可以将共享同一个bin的所有值相加。因此,我们发现对于x = 6,我们有y = 8y = 9accumarray允许您将共享相同y的多个x值组合在一起。将这些值分组后,然后将函数应用于同一组中的所有值,以便为每个组生成最终输出。在我们的例子中,我们想要对它们求和,所以我们需要使用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);