matlab plotyy求助(送分了)

双坐标画四条曲线
前三条y轴是线性
第四条y轴对数坐标
随便取组数据x=1:5 y1=1 y2=2 y3=3 y4=1 10 100 1000 10000
求大神给出具体程序(ticks,2个ylabel等)
类似上图

绘图代码如下:

% 测试数据
x = 0:900;
y123 = [sin(2*pi*x/1200); sin(2*pi*x/1500); sin(2*pi*x/1800)];
y4 = logspace(1,3,length(x));
 
% 绘图命令
[ax,h1,h2]=plotyy(x,y4(end:-1:1),x,y123.',@semilogy,@plot);

% 设置右轴曲线颜色、线型、线宽
set(h2(1),'color',[0 0.5 0],'linestyle','--','LineWidth',1.5)
set(h2(2:3),'color',[0 0.5 0],'linestyle','-.','LineWidth',1.5)
set(h2,'Clipping','off');                     % 设置不剪切超界曲线
set(ax(2),'ytick',-1:.5:1);                   % 设置右轴Tick
set(ax(2),'ycolor',[0 0.5 0]);                % 设置右轴颜色
set(get(ax(1),'YLabel'),'Str','Semilog plot') % 设置左轴Label
set(get(ax(2),'YLabel'),'Str','Linear plot')  % 设置右轴Label
set(gcf,'color','w')                          % 设置窗口背景为白色

 

效果图:

追问

如果是三条曲线对应对数坐标怎么改

追答

我简单解释一下plotyy命令的调用格式你就知道该怎么做了:多数用过这个命令的人都知道其基本调用方式是

plotyy(X1,Y1,X2,Y2)

其中X1,Y1,X2,Y2分别是两组曲线横坐标与纵坐标——要注意,是两“组”曲线,而不是两“条”曲线。上面我举的例子中,第二组曲线就是3条(对应的Y2是个矩阵),你如果希望第一组曲线画3条,那么很简单,第一组的数据改成矩阵就可以:

% 测试数据
x = 0:900;
y123 = [logspace(1,3,length(x)); x; 500*(2+sin(2*pi*x/1800))];
y4 = sin(2*pi*x/1200);

% 绘图命令
[ax,h1,h2]=plotyy(x,y123.',x,y4,@semilogy,@plot);

% 设置右轴曲线颜色、线型、线宽
set(h2,'color',[0 0.5 0],'linestyle','--','LineWidth',1.5)
set(h2,'Clipping','off');                     % 设置不剪切超界曲线
% 设置左轴曲线颜色、线宽
set(h1,'color',[0 0.5 1],'LineWidth',2)

set(ax(1),'ycolor',[0 0.5 1]);                % 设置左轴颜色

% 原代码的14行之后不变,因字数限制,省略

效果如图:

 

这里,在基本调用方式的基础上,主要用到了两个方面的高级用法:

    使用指定的绘图函数。

    默认绘图左右轴都使用plot,可以指定使用其他绘图命令,例如,上面的例子中,左轴使用semilogy,右轴使用plot(当然,你也可以把二者互换);

    返回绘图句柄。

    上面的例子中,把坐标系和曲线的句柄返回到变量,以便后面设置颜色、Tick等属性。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-14

程序如下:

x=1:0.1:5;
y1=x./x;
y2=2*x./x;
y3=3*x./x;
y4=10.^x/10;
[AX,H1,H2] = plotyy(x,y4,x,[y1;y2;y3],'semilogy','plot');
set(H1,'LineStyle','*','Color','m');%设置右侧线型
set(H2,'LineStyle','--','Color','g');%设置左侧线型
set(AX(1),'ylim',[1,10000],'ytick',[10,10^2,10^4]);  %右轴的范围
set(AX(2),'ylim',[-2,4],'ytick',[-2,-1,-0,1,2,3]);  %左轴的范围及刻度
set(get(AX(1),'Ylabel'),'string','semilog plot','fontsize',15);
set(get(AX(2),'Ylabel'),'string','linear plot','fontsize',15);
xlabel('x');
结果:

追问

如果是三条曲线对应对数坐标怎么改

追答

[AX,H1,H2] = plotyy(x,y4,x,[y1;y2;y3],'semilogy','plot');%semilogy是对数坐标,对应左边函数y4。plot是直角坐标,对应右边三个函数[y1;y2;y3]。
三条曲线对应对数坐标,只需要把y4改成对应三条曲线的函数,形式[y5,y6,y7],要用中括号