matlab有自带的plotyy可以画双坐标,但是三坐标的话需要自己添加一层axes,因此搜索之后自己整理出了一个可以任意添加多条y轴的脚本,这里以三轴为范例。
每新建一层axes,便开始画图以及进行图形的设置,通过不断叠加达到画多条线的目的,也可以将bar与line叠加。y轴的范围可以自行调整,但是唯一的bug就是图例的位置是三个图层分别决定的,没法儿做到完美连接。
Code:
%% 画3y轴的figure;
fontsize=24;
axesPosition = [250 100 1100 600]; %# Axes position, in pixels
yWidth = 60; %# y axes spacing, in pixels
xLimit = [1 10]; %# Range of x values
xOffset = -yWidth*diff(xLimit)/axesPosition(3);
x=[1:10];y1=sin(x);y2=cos(x);y3=tan(x);
%# Create the figure and axes:
% plot 1st data
figure('Units','pixels','Position',[100 100 1500 800]);
h1 = axes('Units','pixels','Position',axesPosition,...
'Color','w','XColor','k','YColor','r',...
'XLim',xLimit,'YLim',[-5 5],'NextPlot','add');
plot(h1,x,y1,'-sc','color',[0.7 0.2 0.2],'LineWidth',3);hold on;
legend(h1,'y1','Location','northwest','orientation','horizontal','box','off','Fontname','Times New Roman','FontWeight','bold','FontSize',fontsize);
set(h1,'FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold','ycolor',[0.7 0.2 0.2]);
xlabel(h1,'Num','FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold');
ylabel(h1,'y1','FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold')
% plot 2nd data
h2 = axes('Units','pixels','Position',axesPosition,'yaxislocation','right', ...
'Color','none','XColor','k','YColor','m', ...
'XLim',xLimit,'YLim',[-5 5],...
'XTick',[],'XTickLabel',[],'NextPlot','add');
plot(h2,x,y2,'-oc','color',[0.4 0.5 0.2],'LineWidth',3);hold on;
set(h2,'FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold','ycolor',[0.4 0.5 0.2]);
legend(h2,'y2','Location','north','orientation','horizontal','box','off','Fontname','Times New Roman','FontWeight','bold','FontSize',fontsize);
ylabel(h2,'y2','FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold')
% plot 3rd data
h3 = axes('Units','pixels','Position',axesPosition+yWidth.*[-2 0 2 0],...
'Color','none','XColor','k','YColor','b',...
'XLim',xLimit+[2*xOffset 0],'YLim',[-5 5],...
'XTick',[],'XTickLabel',[],'NextPlot','add');
plot(h3,x,y3,'-oc','color',[0.3 0.5 0.7],'LineWidth',3);hold on
legend(h3,'y3','Location','northeast','orientation','horizontal','box','off','Fontname','Times New Roman','FontWeight','bold','FontSize',fontsize);
set(h3,'FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold','ycolor',[0.3 0.5 0.7]);
ylabel(h3,'y3','FontSize',fontsize,'FontName','Times New Roman','FontWeight','bold')