Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Individual line and axes styles with plotyy

Tags:

plot

matlab

I tried creating a plot with two YAxis like this:

x=linspace(0,20);
y1=linspace(10,10);
y2=x.^2;
y3=y2-y1;
[hAx,hLine1,hLine2]=plotyy([x',x'],[y1',y2'],x,y3);

Now i have two problem with this code:

  1. I can change the Linestyles of the two hLines using hLine1.LineStyle = ':'; for example, but i can not change the styles of the two lines, that hLine1 consists of. Does anyone know how to do this?
  2. I can't use hLine2.YLim = [0 100] to manually adjust the y-limits shown on the 2nd y-axis.

After I couldn't solve the problem using the plotyy, I searched the MATLAB documentation and found another way of implementing my plot, which I thought might be easier to handle:

x=linspace(0,20);
y1=linspace(10,10);
y2=x.^2;
y3=y2-y1;

figure
hold on;
line(x,y1,'Color','r')
line(x,y2,'Color','y')
ax1 = gca;
ax2 = axes('Position',ax1.Position,'YAxisLocation','right');
line(x,y3,'Parent',ax2,'Color','b')

The problem here is, that it doesn't even show the first and the second line, but only the third and i don't know why. I would prefer getting the problem solved using the plotyy, but if that's not possible I would appreciate a solution for the 2nd piece of code as well.

like image 600
Max Avatar asked Feb 02 '26 03:02

Max


2 Answers

I think you haven't noticed that the outputs of plotyy are arrays of objects, and not single objects.

x=linspace(0,20);
y1=linspace(10,10);
y2=x.^2;
y3=y2-y1;

[hAx,hLine1,hLine2]=plotyy([x',x'],[y1',y2'],x,y3);
hLine1(1).LineStyle = '--';
hLine1(2).LineStyle = ':';

% either this
ylim( hAx(2), [0 110] );

% or alternatively
f=gcf; ylim( f.Children(2), [0 110] );
like image 116
Jonathan H Avatar answered Feb 04 '26 15:02

Jonathan H


You're not seeing the first two lines because axes backgrounds are white by default. Setting the Color property of the second axes object to 'none' should give you what you're looking for:

x=linspace(0,20);
y1=linspace(10,10);
y2=x.^2;
y3=y2-y1;

figure
hold on;
line(x,y1,'Color','r')
line(x,y2,'Color','y')
ax1 = gca;
ax2 = axes('Position',ax1.Position,'YAxisLocation','right', 'Color', 'none');
line(x,y3,'Parent',ax2,'Color','b')

the plot

EDIT: I'd also recommend checking out linkaxes if you're going to be zooming/panning your axes and want to keep some or all of the axes synchronized.

like image 34
sco1 Avatar answered Feb 04 '26 15:02

sco1



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!