Plotting Multiple y-axes with different range on the same plot

조회 수: 2 (최근 30일)
Isa Isa
Isa Isa 2012년 12월 23일
편집: emami.m 2021년 1월 4일
Good Day ,
Please assist me on these problems
1. I wish to put six plots on the same plot using matlab. The details of each plot are stated below
PLOT 1 x axis range 0:1 y axis range 0:1
PLOT 2 x axis range 0:1 y axis range 0:1
PLOT 3 x axis range 0:1 y axis range 0:1
PLOT 4 x axis range 0:1 y axis range 0:1
PLOT 5 x axis range 0:1 y axis range 0:2
PLOT 6 x axis range 0:1 y axis range 0:7
Please how do I put all these plots on one single plot despite different y axis range?
Thanks
Best regards, Isa

답변 (3개)

Laura Proctor
Laura Proctor 2012년 12월 23일
편집: Laura Proctor 2012년 12월 23일
The issue is that this function can only plot one line per set of axes - so only three lines.
I have hacked Denis Gilbert's plotyyy code to facilitate your specific needs. See below:
%%Dummy data
x1 = 0:0.01:1;
x2 = x1;
x3 = x1;
x4 = x1;
x5 = x1;
x6 = x1;
y1 = x1;
y2 = x2.^2;
y3 = x3.^3;
y4 = sin(x4);
y5 = fliplr(2*x5.^2);
y6 = 7*x6;
ylabels{1}='A'; ylabels{2}='B'; ylabels{3}='C';
fh = figure('units','normalized');
cfig = get(fh,'Color');
ah(1) = axes('Parent',fh);
lh1 = plot(x1,y1,x2,y2,x3,y3,x4,y4);
lineColors = get(ah(1),'ColorOrder')
ah(2) = axes('Parent',fh);
lh2 = plot(x5,y5,'Color',lineColors(5,:));
set(ah(2),'YAxisLocation','right','Color','none');
pos = [0.1 0.1 0.7 0.8];
offset = pos(3)/5.5;
%Reduce width of the two axes generated by plotyy
pos(3) = pos(3) - offset/2;
set(ah,'position',pos);
%Determine the position of the third axes
pos3=[pos(1) pos(2) pos(3)+offset pos(4)];
%Determine the proper x-limits for the third axes
limx1=get(ah(1),'xlim');
limx3=[limx1(1) limx1(1) + 1.2*(limx1(2)-limx1(1))];
ah(3)=axes('Position',pos3,'box','off',...
'Color','none','XColor','k','YColor',lineColors(6,:),...
'xtick',[],'xlim',limx3,'yaxislocation','right');
lh3 = line(x6,y6,'Color',lineColors(6,:),'Parent',ah(3));
limy3=get(ah(3),'YLim');
%Hide unwanted portion of the x-axis line that lies
%between the end of the second and third axes
line([limx1(2) limx3(2)],[limy3(1) limy3(1)],...
'Color',cfig,'Parent',ah(3),'Clipping','off');
axes(ah(2))
%Label all three y-axes
set(get(ah(1),'ylabel'),'string',ylabels{1})
set(get(ah(2),'ylabel'),'string',ylabels{2})
set(get(ah(3),'ylabel'),'string',ylabels{3})
  댓글 수: 2
Tony Castillo
Tony Castillo 2017년 4월 4일
편집: Walter Roberson 2017년 4월 4일
Hi, Laura I've been trying to adapt your code to my data, but I'm having a message of error, could you help me with it?.
I attached the data I'm actually using to graph it.
close all
clear all
%%load data
load('TMS.mat')
load('Vc.mat')
load('Ic.mat')
load('IL.mat')
load('VL.mat')
load ('soc.mat')
t1=tms(1,:)'/3600;
t = timeseries(t1);
% % Potencias
pot1=(tms(2,:).*tms(3,:))';
pot=timeseries(pot1);
PL=IL*VL; %Carga
% PL.Time=PL.Time/3600;
Pc=Ic*Vc; %Salida de convertidor
% Pc.Time=Pc.Time/3600;
hold on
grid on
ylim([-1000 3e5]);
xlim([0 24]);
ax = gca;
ax.XTick = [0:3:24];
% legend('Cell Array Power','Buck Power', 'Load Power')
%%las graficas
x1 = t;
x2 = t;
x3 = t;
x4 = t;
y1 = pot;
y2 = Pc;
y3 = PL;
y4 = soc;
ylabels{1}='Power (W)'; ylabels{2}='%SOC';
fh = figure('units','normalized');
cfig = get(fh,'Color');
ah(1) = axes('Parent',fh);
lh1 = plot(x1,y1,x2,y2,x3,y3,x4,y4);
lineColors = get(ah(1),'ColorOrder')
ah(2) = axes('Parent',fh);
lh2 = plot(x5,y5,'Color',lineColors(5,:));
set(ah(2),'YAxisLocation','right','Color','none');
pos = [0.1 0.1 0.7 0.8]; %fija la linea Azul que sirve como escala
offset = pos(3)/5.5;
%Reduce width of the two axes generated by plotyy
pos(3) = pos(3) - offset/2;
set(ah,'position',pos);
%Determine the position of the third axes
% pos3=[pos(1) pos(2) pos(3)+offset pos(4)];
%Determine the proper x-limits for the third axes
limx1=get(ah(1),'xlim');
limx3=[limx1(1) limx1(1) + 1.2*(limx1(2)-limx1(1))];
ah(3)=axes('Position',pos3,'box','off',...
'Color','none','XColor','k','YColor',lineColors(6,:),...
% 'xtick',[],'xlim',limx3,'yaxislocation','right');
% lh3 = line(x6,y6,'Color',lineColors(6,:),'Parent',ah(3));
% limy3=get(ah(3),'YLim');
%Hide unwanted portion of the x-axis line that lies
%between the end of the second and third axes
% line([limx1(2) limx3(2)],[limy3(1) limy3(1)],...
% 'Color',cfig,'Parent',ah(3),'Clipping','off');
axes(ah(2))
%Label all three y-axes
set(get(ah(1),'ylabel'),'string',ylabels{1})
set(get(ah(2),'ylabel'),'string',ylabels{2})
Walter Roberson
Walter Roberson 2017년 4월 4일
Tony Castillo: what error message do you observe?
Note: you omitted attaching the data.

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


Walter Roberson
Walter Roberson 2012년 12월 23일
  댓글 수: 1
Isa Isa
Isa Isa 2012년 12월 23일
편집: Walter Roberson 2012년 12월 23일
Hi Walter,
Thanks. I used plotyyy as advised
ylabels{1}='A';
ylabels{2}='B';
ylabels{3}='C';
[ax,hlines] = plotyyy(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,ylabels)
I received the following error message
Error using plotyyy
Too many input arguments.
I cannot figure out what went wrong. Please assist.
Thanks
Isa

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


Azzi Abdelmalek
Azzi Abdelmalek 2012년 12월 23일
편집: Azzi Abdelmalek 2012년 12월 23일
Adapt this to your plots
close all
% ------------------your 6 functions-----------------------------------------
x=0:0.5:10;
y1=0.1*sin(0.1*x);
y2=0.1*cos(0.1*x);
y3=0.1*cos(0.2*x);
y4=0.2*sin(0.4*x);
y5=0.7*sin(0.6*x)
y6=0.1*sin(0.8*x)
%-----------------------------------------------------------------------
xlab='time' % x-axis title
pas=8; % Number of ticks per axe
tail=8; % font size
mark1='d',c1='g'
mark2='<',c2='b'
mark3='s',c3='r'
mark4='p',c4='k'
mark5='o',c5='m'
mark6='*',c6='y';
fontname='courrier'
fontsize=9.2;
fontsize_ax=8;
% -----------your legend names--------------------------------------------
param1='tg\delta',
param2='Cx',
param3='Us',
param4='Q',
param5='L'
param6='H'
%-----------------y-axis titles----------------------------------------
paramm1='tg\delta .10^-^2',
paramm2='Cx(pF)',
paramm3=' Us(kV)',
paramm4='Q(pC)',
paramm5='L(mm)';
paramm6='H(m)';
%----------------------------------------------plot y1---------------------
plot(x,y1,c1)
ax1=gca;
set(gcf,'position',[100 100 1300 550])
line(x,y1,'color',c1,'Marker',mark1,'LineStyle','none','Markersize',tail,'parent',ax1);
set(ax1,'Ylim',decimal([min(y1) max(y1)]),'Xlim',[0 max(x)]);
ylabel(paramm1)
xlabel(xlab)
set(ax1,'position',[0.16 0.11 0.73 0.8],'fontsize',fontsize_ax,'Ycolor',c1)
pos=double(get(ax1,'position'))
%----------------------------------------------plot y2--------------------
ax2=axes('position',pos, 'XAxisLocation','bottom','YAxisLocation','left', 'Color','none', 'XColor',c2,'YColor',c2);
plot(x,y2,c2);
line(x,y2,'color',c2,'Marker',mark2,'LineStyle','none','Markersize',tail,'parent',ax2);
set(ax2,'Ylim',decimal([min(y2) max(y2)]),'Xlim',[0 max(x)],'Visible','off')
%----------------------------------------------plot y3-------------------
axe3=axes('position',pos, 'XAxisLocation','bottom','YAxisLocation','left','Color','none', 'XColor',c2,'YColor',c2);
plot(x,y3,c3);
line(x,y3,'color',c3,'Marker',mark3,'LineStyle','none','Markersize',tail,'parent',axe3);
set(axe3,'Ylim',decimal([min(y3) max(y3)]),'Xlim',[0 max(x)],'Visible','off')
%----------------------------------------------plot y4-----------------
axe4=axes('position',pos, 'XAxisLocation','bottom','YAxisLocation','left', 'Color','none', 'XColor',c2,'YColor',c2);
plot(x,y4,c4);
line(x,y4,'color',c4,'Marker',mark4,'LineStyle','none','Markersize',tail+2,'parent',axe4);
set(axe4,'Ylim',decimal([min(y4) max(y4)]),'Xlim',[0 max(x)],'Visible','off')
%----------------------------------------------plot y5--------------------
axe5=axes('position',pos, 'XAxisLocation','bottom','YAxisLocation','left', 'Color','none', 'XColor',c2,'YColor',c2);set(axe5,'Xlim',[0 max(x)])
plot(x,y5,c5);
line(x,y5,'color',c5,'Marker',mark5,'LineStyle','none','Markersize',tail,'parent',axe5);
set(axe5,'Ylim',decimal([min(y5) max(y5)]),'Xlim',[0 max(x)],'Visible','off');
%----------------------------------------------plot y6--------------------
axe6=axes('position',pos, 'XAxisLocation','bottom','YAxisLocation','left', 'Color','none', 'XColor',c2,'YColor',c2);set(axe5,'Xlim',[0 max(x)])
plot(x,y6,c6);
line(x,y6,'color',c6,'Marker',mark6,'LineStyle','none','Markersize',tail,'parent',axe6);
set(axe6,'Ylim',decimal([min(y6) max(y6)]),'Xlim',[0 max(x)],'Visible','off');
%---------------------------------------------------------ax12------------
pos12=[pos(1)+pos(3)-0.001 pos(2) 0.001 pos(4)]
axe12=axes('position',pos12,'XAxisLocation','top','YAxisLocation','right',...
'Color','none','fontsize',fontsize_ax, 'XColor',c2,'YColor',c2);
set(get(axe12,'XLabel'),'String',strvcat(' ',paramm2),'Fontname',fontname,'Fontsize',fontsize);
set(axe12,'Ylim',decimal([min(y2) max(y2)]))
inc2=abs(max(y2)-min(y2))/pas;
my=min(y2):inc2:max(y2);
set(axe12,'Ytick',my)
%---------------------------------------------------------ax13-------------
pos13=[0.94 pos(2) 0.001 pos(4)]
axe13=axes('position',pos13, 'XAxisLocation','top','YAxisLocation','right',...
'Color','none','fontsize',fontsize_ax, 'XColor',c3,'YColor',c3);
set(get(axe13,'XLabel'),'String',strvcat(' ',paramm3),'Fontname',fontname,'Fontsize',fontsize)
set(axe13,'Ylim',decimal([min(y3) max(y3)]))
inc3=(max(y3)-min(y3))/pas;
my=min(y3):inc3:max(y3);
set(axe13,'Ytick',my)
%---------------------------------------------------------ax14------------
pos14=[0.11 pos(2) 0.001 pos(4)]
axe14=axes('position',pos14, 'XAxisLocation','Bottom','YAxisLocation','left',...
'Color','none','fontsize',fontsize_ax, 'XColor',c4,'YColor',c4);
set(get(axe14,'XLabel'),'String',strvcat(' ',paramm4),'Fontname',fontname,'Fontsize',fontsize);
set(axe14,'Ylim',decimal([min(y4) max(y4)]))
inc4=(max(y4)-min(y4))/pas;
my=min(y4):inc4:max(y4);
set(axe14,'Ytick',my)
%---------------------------------------------------------ax15------------
pos15=[0.07 pos(2) 0.001 pos(4)]
axe15=axes('position',pos15,'XAxisLocation','bottom','YAxisLocation','left',...
'Color','none','fontsize',fontsize_ax, 'XColor',c5,'YColor',c5);
set(get(axe15,'XLabel'),'String',strvcat(' ',paramm5),'Fontname',fontname,'Fontsize',fontsize)
set(axe15,'Ylim',decimal([min(y5) max(y5)]))
inc5=(max(y5)-min(y5))/pas;
my=min(y5):inc5:max(y5);
set(axe15,'Ytick',my)
%---------------------------------------------------------ax16------------
pos16=[0.03 pos(2) 0.001 pos(4)]
axe16=axes('position',pos16,'XAxisLocation','bottom','YAxisLocation','left',...
'Color','none','fontsize',fontsize_ax, 'XColor',c6,'YColor',c6);
set(get(axe16,'XLabel'),'String',strvcat(' ',paramm6),'Fontname',fontname,'Fontsize',fontsize)
set(axe16,'Ylim',decimal([min(y6) max(y6)]))
inc6=(max(y6)-min(y6))/pas;
my=min(y6):inc6:max(y6);
set(axe16,'Ytick',my)
%------------------------------------------------legend------------------
ax20=axes('position',pos, 'Color','none')
line(-100,100,'color',c1,'Marker',mark1,'LineStyle','-','markerfacecolor',c1,'Markersize',tail,'parent',ax20);
hold on;line(-100,100,'color',c2,'Marker',mark2,'LineStyle','-','markerfacecolor',c2,'Markersize',tail,'parent',ax20);
hold on;line(-100,100,'color',c3,'Marker',mark3,'LineStyle','-','markerfacecolor',c3,'Markersize',tail,'parent',ax20);
hold on;line(-100,100,'color',c4,'Marker',mark4,'LineStyle','-','markerfacecolor',c4,'Markersize',tail+2,'parent',ax20);
hold on;line(-100,100,'color',c5,'Marker',mark5,'LineStyle','-','markerfacecolor',c5,'Markersize',tail,'parent',ax20);
hold on;line(-100,100,'color',c6,'Marker',mark6,'LineStyle','-','markerfacecolor',c6,'Markersize',tail,'parent',ax20);
set(ax20,'Xlim',[0 1]);
set(ax20,'visible','off');
grid(ax1);
name={param1;param2;param3;param4;param5;param6}
hleg=legend(ax20,name)
title(ax1,'figure1')
  댓글 수: 1
emami.m
emami.m 2021년 1월 4일
편집: emami.m 2021년 1월 4일
Hi Azizi,
What is 'decimal' function?
Also, ylabels are not visible.

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

카테고리

Help CenterFile Exchange에서 Graphics Objects에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by