Sum two plots and plot the result
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
1 개 추천
Is there a simple way to take the sum of two plots that overlap and plot the result? X and Y are the same length for both.

댓글 수: 1
The easiest way is to sum the data itself:
Z=X+Y;
plot(t,X,t,Y,t,Z)
채택된 답변
Star Strider
2019년 9월 7일
One approach (assuming that they are functions of the same independent variable vector, so in addition to being the same lengths, they are evaluated at the same values of the independent variable):
XplusY = sum([X(:),Y(:)],2);
This creates a column vector result, since we don’t know the sizes of the original ‘X’ and ‘Y’. If you want it as a row vector, transpose it.
To sum only the values where ‘X’ is greater than or equal to ‘Y’:
L = X >= Y;
XL = X(L);
YL = Y(L);
XplusY = sum([XL(:),YL(:)],2);
since I am not certain what ‘overlap’ means here.
댓글 수: 9
This does not work since they are not functions of the same independent variable vector. Here, I have in one plot a set of X and Y values, and I have in the second plot X shifted by some amount and Y scaled by some amount. So the vectors remain the same lengths, but possess different values.
Rik
2019년 9월 7일
Then you will have to interpolate one or both to a shared x, after which you will be able to add them up.
If they don’t have a common independent variable, you can’t sum them and get a meaningful result.
You will have to create a common independent variable for both, then use interp1 to interpolate both of them to it. Then you could sum the interpolated curves.
Example —
Xi = linspace(1.2, 3.4, 50);
X = exp(-((Xi-2.1)/0.5).^2);
Yi = linspace(2.3, 3.4, 50);
Y = exp(-((Yi-2.9)/0.2).^2);
figure
plot(Xi, X, Yi, Y)
grid
XiYi = [Xi(:); Yi(:)];
Ci = linspace(min(XiYi), max(XiYi), 150);
Xq = interp1(Xi(:), X(:), Ci(:), 'linear','extrap');
Yq = interp1(Yi(:), Y(:), Ci(:), 'linear','extrap');
Sq = sum([Xq(:) Yq(:)],2);
figure
plot(Ci, Xq, Ci, Yq, Ci, Sq)
grid
Experiment to get the result you want.
That works! Thank you!
Star Strider
2019년 9월 8일
As always, my pleasure!
Susmita Panda
2021년 5월 24일
But the in the summation plot, the second also starts from starting rather it should have a delay?
Niko
2023년 7월 5일
What if they are both independent, i.e. same y and x "measurements", but with different density points (x-axis is more denser on one with higher resolution in a smaller window than the other)?
Star Strider
2023년 7월 5일
With respect to different independent variable ranges, the interpolation is still necessary, however they can only be summed in the ranges where all the curves exist. All the curves would need to be truncated to those limits, then the interpolated values summed, ignoring regions where they do not all overlap.
With respect to different resulutions, it is preferable to interpolate the higher resolution signal to match the values in the lower resolution signal. This avoids the problem of creating data in the lower resolution isgnal where none previously existed, as would be the problem if the lower resolution signal were interpolated to match the higher resolution signal, since the exact behaviour of the lower resolution signal at those points is obviously not known.
.
Rik
2023년 7월 6일
You might consider performing a moving average before downsampling. Otherwise you may introduce other effects (consider the situation where one of the curves is a sine and the resolution of the other curve is equal to the period of the sine).
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Line Plots에 대해 자세히 알아보기
태그
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
