找回密码
 注册
关于网站域名变更的通知
查看: 468|回复: 2
打印 上一主题 下一主题

Matlab plotyy画双纵坐标图实例分享

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-17 09:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 thinkfunny 于 2020-4-17 09:39 编辑 % ~) s8 B* C+ T* s8 E( W& n# w
$ g' W! P! T0 T  P9 i$ f! N7 U

Matlab plotyy画双纵坐标图实例

x = 0:0.01:20;
! C0 n9 A" `# w4 t' x. u5 @+ |y1 = 200*exp(-0.05*x).*sin(x);' v/ D6 @: p2 W! b% E! R: t
y2 = 0.8*exp(-0.5*x).*sin(10*x);5 k0 J+ J; E" Z4 ~! [
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

set(AX(1),'XColor','k','YColor','b');
! T2 ^3 v' |, c8 W' P+ Y) mset(AX(2),'XColor','k','YColor','r');

HH1=get(AX(1),'Ylabel');, ~# l5 U; T7 l8 ?: V
set(HH1,'String','Left Y-axis');7 |: a# s2 V# @' [: q: w# E
set(HH1,'color','b');

HH2=get(AX(2),'Ylabel');- w& [9 u4 ~* R5 I2 b8 U
set(HH2,'String','Right Y-axis');
% n4 s0 J, l* p6 @1 bset(HH2,'color','r');

set(H1,'LineStyle','-');
4 Y8 \+ c; }% B5 ~set(H1,'color','b');  h: u/ A; H9 c% H
set(H2,'LineStyle',':');
3 u! U( b9 U1 a* |5 U$ Fset(H2,'color','r');

legend([H1,H2],{'y1 = 200*exp(-0.05*x).*sin(x)';'y2 = 0.8*exp(-0.5*x).*sin(10*x)'});8 a' w) t$ {; r6 Y. @
xlabel('Zero to 20 musec.');
& s" u/ h/ k: `- k7 B. Htitle('Labeling plotyy');


; `$ g3 t3 }5 I2 o0 F: U" Q- M, u7 ?5 W" U+ B

Q:右边用蓝色圈起来的tick能去掉吗?由于用plotyy画图,为了使图尽量地显示出来,用了set(AX(1),'YLimMode','auto'),但这样可能会导致左边AX(1)和右边AX(2)的tick的间距不一样,影响美观。或者说能不能使plotyy画出的图两边的tick间距是一样的,这样在图形右边的tick就会重合在一起.

A:如果只是想让plotyy的图美一些,可以使用其如下形式的调用方式:
- B& i. a3 ~# h7 w2 U[AX,H1,H2] = plotyy(...)0 X- u: Q9 Z. h  N1 D
其中AX(2)就是右边Axes对象的句柄,拿到它以后就可以set或者get来处理了,也可以把其ytick关掉。

A:也可以用line语句来画,就没有左边和上边的线了。

Q:plotyy(X1,Y1,X2,Y2,FUN1,FUN2),FUN1和FUN2应该怎么写?

A:这两个FUN代表plotyy不一定要用两个plot,比如下面的例子,一条曲线用plot,一条用semilogy
4 j- u+ ~! i/ o( q
8 m- x3 ]' M6 G2 B+ Vx1=1:0.1:100;( @* C& h0 |; a5 h' u
x2=x1;2 y' k' V. c8 x" W
y1=x1;" `+ z4 G. l* z  D  v
y2=x2.^3;4 d8 ~7 ^' ?. m2 a9 Y% T) B1 Z. f
plotyy(x1,y1,x2,y2,@plot,@semilogy)


1 H  ]5 i! w" V& W. n
4 @8 ^# `+ r+ H7 h) P

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

MATLAB画双纵坐标


( m# v9 v+ m* a+ }

具有两个纵坐标标度的图形7 g# J" m% v% |0 G
在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。调用格式为:
5 V( \( y( J, Y3 k. c/ jplotyy(x1,y1,x2,y2): a1 _5 h, Y+ P
其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。

双y轴坐标可以用plotyy(x,y1,x,y2)来实现
, E7 T* j! z5 D双x坐标可以用$ \) A# \4 S: M4 K
set(gca,'xaxislocation','bottom','xticklabel',{'0','1','2','3','4'}) (假设x轴的标注为1,2,3,4)2 z! F7 D- g% L! y( ]% i% }
set(gca,'xaxislocation','top','xticklabel',{'0','1','2','3','4'})
4 z+ g  ^9 Y2 j进行相应的设置

【 * 例 10.7.3 -1 】制作一个双坐标系用来表现高压和低温两个不同量的过渡过程。

tp=(0 :100)/100*5;yp=8+4*(1-exp(-0.8*tp).*cos(3*tp)); % 压力数据

tt=(0 :500)/500*40;yt=120+40*(1-exp(-0.05*tt).*cos(tt)); % 温度数据

% 产生双坐标系图形

clf reset,h_ap=axes('Position',[0.13,0.13,0.7,0.75]); %<4>

set(h_ap,'Xcolor','b','Ycolor','b','Xlim',[0,5],'Ylim',[0,15]);

nx=10;ny=6; %<6>

pxtick=0: ((5-0)/nx):5;pytick=0: ((15-0)/ny):15; %<7>

set(h_ap,'Xtick',pxtick,'Ytick',pytick,'Xgrid','on','Ygrid','on')

h_linet=line(tp,yp,'Color','b'); %<9>

set(get(h_ap,'Xlabel'),'String',' 时间 /rightarrow (分) ')

set(get(h_ap,'Ylabel'),'String',' 压力 /rightarrow(/times10 ^{5} Pa )')

h_at=axes('Position',get(h_ap,'Position')); %<12>

set(h_at,'Color','none','Xcolor','r','Ycolor','r'); %<13>

set(h_at,'Xaxislocation','top') %<14>

set(h_at,'Yaxislocation','right','Ydir','rev') %<15>

set(get(h_at,'Xlabel'),'String','/fontsize{15}/fontname{ 隶书 } 时间 /rightarrow (分) ')

set(get(h_at,'Ylabel'),'String',' ( {/circ}C )/fontsize{15} /leftarrow /fontname{ 隶书 } 零下温度 ')

set(h_at,'Ylim',[0,210]) %<18>

line(tt,yt,'Color','r','Parent',h_at) %<19>

xpm=get(h_at,'Xlim'); %<20>

txtick=xpm(1): ((xpm(2)-xpm(1))/nx):xpm(2); %<21>

tytick=0 : ((210-0)/ny):210; %<22>

set(h_at,'Xtick',txtick,'Ytick',tytick) %<23>

! T3 ^. j" s' `  `4 q

5 M' }7 }# O- Q; a- ?5 ^5 \0 \6 X: h

6 s+ F3 ]  Q- ]& c6 p6 y

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

实例(已验证):

clc;4 q: I3 O( z. L
clear all;
4 K$ V! e6 h# H/ O* yclose all;  A/ T( _% e7 R$ y
x=0:0.1:2*pi;
4 r- H' u  E+ ly1=sin(x);
& l! j% m( N+ ty2=cos(x);
. v4 }1 ~. J3 i" T% a( E[AX]=plotyy(x,y1,x,y2);3 ^% U- M" o0 Y) I; O# o
set(get(gca,'xlabel'),'string','X-axis');
, ~) A$ x$ v0 H3 `4 [' \' Pset(get(AX(1),'Ylabel'),'string','left Y-axis');: v2 G/ [. M# m% R7 s$ r( x
set(get(AX(2),'Ylabel'),'string','right Y-axis');
' e0 p/ J0 ~, _' [. F; P5 B7 w! z/ Hset(gca,'xTick',[0:0.5:7]);& L& L+ P8 s4 s# K1 ?; p) m
set(AX(1),'yTick',[-1:0.2:1]);
0 {  \6 b  \) U% E- ]+ bset(AX(2),'yTick',[-1:0.5:1]);

尚存在问题:这种设置方法,对各个轴的最小刻度单位可以设置,但是刻度范围(x取(0~7),y1取(-1~1))不能设置。9 C5 R# z: c$ J; m, X
2010-12-23修改

. Y$ Q& t9 ^0 }  j% @4 r: w8 O! I

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

clc$ E# L4 e& }: G. I; K$ \
clear all
( l* j" B& J$ V" \5 E$ eclose all
( I9 D; j7 z3 @runoff=[10700 11400 15800 22900 43100 40700 50500 46000 41800 35000];* o/ [  \/ T$ j( G# V' Q
sed=[0.105 0.094 0.156 1.264   0.363 0.429 0.731 0.682 0.654 0.290];7 N( m* E1 M- i- V! D
m=1:10;! H% M% S/ Z1 u6 W/ g
[ax,h1,h2]=plotyy(m,runoff,m,sed); %h-- line handle
& c8 c, \1 [1 I7 e8 e$ pset(get(ax(1),'Ylabel'),'string','Runoff (m^3/s))','color','r') %y1
0 x" \+ K( l# m# ^0 b- lset(get(ax(2),'Ylabel'),'string','Sediment concentration (kg/m^3)','color','k') %y2
5 c  L- a1 ?1 Y1 F3 sxlabel('Month')
7 D, E: O( }* A* O8 ]" K4 mset(h1,'linestyle','-','color','r');   
1 `. _5 f0 c+ O9 ^set(h2,'linestyle','- -','color','k');
7 _1 O: Y) ~6 Mlegend([h1 h2],'runoff','sediment concentration') %标注两条线" T2 l- u7 o3 k
legend('boxoff')8 I- Q4 `( b& j: [7 L0 r5 ~
% box off7 r/ i0 s9 t0 b5 k7 X% _
set(ax(: ),'Ycolor','k') %设定两个Y轴的颜色为黑色
, K# _3 q4 t. u% k$ O+ _- Nset(ax(1),'ytick',[0:10000:100000]); %设置y轴间隔2 i& v) p; t) A; j( H% i
set(ax(2),'ytick',[0:0.1:1.5])( f% m2 h; ?& p+ W- ]  b, v; X
set(ax,'xlim',[1 12]) % 设置x轴范围
, s, P. \& E4 t( z) G  \3 p, phold on+ h* P: T) `% S+ g* c7 K- U; o( Z
scatter(ax(1),4,22900,'r*')
7 x- S2 ]. ?( q$ c3 ]axes(ax(2));
1 I8 n) J3 N( A) W; ~3 d- ihold on
  N  n2 U$ ~  m' W4 _scatter(4,1.264,'ro')


$ H9 t3 q) ^5 M9 a8 V/ w7 R

! a* Q. \1 u7 @/ I5 w  C$ q
' I5 l. T2 |# ?; @; ]( ~
' b3 w) r! n* [) C) u6 S

$ u: b: S8 w# _* M0 d
& N, A4 i. n  n% C5 M/ N2 B. x: l( X) k
# ?, W& L5 X& y! U

0 t9 [0 p& v; z" Z" o* X9 \/ ~
8 B( X1 [, a. \* i; c
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-4-17 18:51 | 只看该作者
    lotyy画出的图两边的tick间距是一样的

    该用户从未签到

    3#
    发表于 2020-4-20 13:42 | 只看该作者
    Matlab plotyy画双纵坐标图实例分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 16:08 , Processed in 0.203125 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表