簡體   English   中英

如何將x的值相同但y的值不同的兩個散點相加?

[英]How do I add up two scatter points with the same values of x but different values of y?

在莖圖上,如何添加x值相同但y值不同的點?

例如,給出以下代碼:

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

如果繪制xy ,則將是輸出:

在此處輸入圖片說明

我想將(6,8)(6,9)加起來,使其變成(6,17) ,就像圖像顯示的一樣。

我該如何實現?

accumarrayxy一起使用,以便可以將共享相同x類似條目合並或分組。 對這些值進行分箱后,您可以將共享同一分箱的所有值相加。 這樣,我們看到對於x = 6 ,我們有y = 8y = 9 accumarray允許您將共享相同x多個y值組合在一起。 將這些值分組后,您便可以對同一組中的所有值應用函數,以為每個組產生最終輸出。 在我們的例子中,我們想對它們求和,因此我們需要使用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 ,因此在繪制stem圖時不會重復X unique也具有對x值進行排序的行為。 這樣做x(:)y(:)是為了使您可以獨立地將輸入數據作為行向量或列向量。 accumarray僅接受向量(或矩陣,但我們不會去那里),因此執行x(:)y(:)可確保兩個輸入均為列向量。

我們得到:

在此處輸入圖片說明

上面的代碼假定x整數,並且從1開始。如果不是,則使用unique的第三個輸出為每個數字分配一個唯一的ID,然后通過accumarray運行它。 完成后,像accumarray一樣使用accumarray的輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM