在干线图上,如何添加具有相同x
值但y
值不同的点?
例如,给出以下代码:
x = [1 2 3 6 6 4 5];
y = [3 6 1 8 9 4 2];
stem(x,y);
如果您绘制x
和y
,则这将是输出:
我希望将(6,8)
和(6,9)
加起来,使其变为(6,17)
,就像图片所显示的那样。
我怎样才能做到这一点?
答案 0 :(得分:2)
将accumarray
与x
和y
一起使用,这样您就可以将共享相同x
的相似条目分组或分组。将这些值分箱后,您可以将共享同一个bin的所有值相加。因此,我们发现对于x = 6
,我们有y = 8
和y = 9
。 accumarray
允许您将共享相同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(:)
确保两个输入都是列载体
我们得到:
上面的代码假设x
是整数,从1开始。如果不是,则使用unique
的第三个输出分配每个数字一个唯一的ID,然后通过accumarray
运行。完成后,请使用accumarray
的输出,例如正常:
[xu,~,id] = unique(x);
Z = accumarray(id, y(:), [], @sum);
stem(xu, Z);