Using PLOTYY with multiple arrays of different sizes.

조회 수: 7 (최근 30일)
Kevin
Kevin 2014년 7월 23일
댓글: dpb 2014년 7월 24일
(x1,y1), (x2,y2), and (x3,y3) are pairs of arrays which each have a different size.
i.e.
size(x1)==size(y2)
size(x1)~=size(x2)).
The elements of (x3,y3) are of a different scale than the rest of the data and thus why I will be using PLOTYY.
If
size(x)==size(y4)==size(y5)
you can do this:
plotyy(x,[y4,y5],x3,y3)
and the result is 2 plots on one y-axis and one on the other.
It would therefore seem that I could do this:
plotyy([x1,x2],[y1,y2],x3,y3)
but that is not the case. I hope I have made my objective clear, and that someone will have some advice.

답변 (2개)

dpb
dpb 2014년 7월 23일
...size(x1)~=size(x2))
It would therefore seem that I could do this:
plotyy([x1,x2],[y1,y2],x3,y3)
I don't see why you would think so...would you expect
z=[x1 x2];
on its own to be successful unless size(x1,1)==size(x2,1)??? How would it be supposed to work otherwise?
The simplest way out of your (basically self-created by overthinking the problem) dilemma is to simply do sotoo..
hAx=plotyy(x1,y1,x3,y3); % plot the two axes different scales, save handles
hold on
plot(hAx(1),x2,y2) % add the second set of data to the first axes
then salt to suit line styles, etc., etc., etc., ...
Alternatively, you can use the feature of plot that ignores NaNs and pad the shorter of x1/x2 and y1/y2 with NaN to make them the same length and then plot the concatenation in a single call. Presuming it's x2 that's the shorter (can always write logic to handle it programmatically; this is just demo purposes code),
n=length(x1)-length(x2); % how many short are we?
x2=[x2;nan(n,1)]; % add that many NaNs
y2=[y2;nan(n,1)];
hAx=plotyy([x1 x2],[y1 y2],x3,y3);
Now you can concatenate as they're same length; plot will ignore the NaN silently.
  댓글 수: 2
Kevin
Kevin 2014년 7월 24일
I should have mentioned that I'd already had success using HOLD ON and "layering" a PLOT on my PLOTYY as you suggested in the first part of your answer.
I wanted some other opinions because I have not had to use PLOTYY much before and was wondering if there was a better way to accomplish my goal but it seems like I may just stick to the simpler solution.
dpb
dpb 2014년 7월 24일
If you're going to do this fairly frequently it could well be worth a few minutes to write a routine that encapsulates the adding of the NaN to the shorter of arrays passed in order to make them commensurate in length for susbequent concatenation for plotyy (or for plot itself, for that matter).
Alternatively, the process that creates the data arrays perhaps could have the smarts built into it to match the previous longest length so they'd already be the same length.
But, concatenation is the only way to get the array form required for any of the plotting routines; they don't operate on cell arrays which would be a nice enhancement.

댓글을 달려면 로그인하십시오.


Neha Talnikar
Neha Talnikar 2014년 7월 23일
The last command does work provided that size(x1)==size(x2).
plotyy([x1,x2],[y1,y2],x3,y3)
Similar example is available in the documentation under the Examples topic. Refer to the last example: http://www.mathworks.com/help/matlab/ref/plotyy.html
  댓글 수: 1
dpb
dpb 2014년 7월 23일
Excepting that's the precise issue raised in the question -- his initial sizes are not the same so he couldn't concatenate.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Two y-axis에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by