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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 thinkfunny 于 2020-4-17 09:39 编辑 % Q2 [+ w. X' R/ S) H4 d* B, t
$ A; ^; @0 i; s4 ^0 {5 r9 f, `

Matlab plotyy画双纵坐标图实例

x = 0:0.01:20;! f: C: ~5 T% T7 |5 k: ?0 E
y1 = 200*exp(-0.05*x).*sin(x);! T; K4 i" j4 G8 w1 S* [
y2 = 0.8*exp(-0.5*x).*sin(10*x);9 H. j2 B' f" j% A! }' L# @4 X
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

set(AX(1),'XColor','k','YColor','b');
+ \+ j4 z' i& O* [; r: u  Qset(AX(2),'XColor','k','YColor','r');

HH1=get(AX(1),'Ylabel');' d5 F! ?: t1 |- e  a
set(HH1,'String','Left Y-axis');
$ C( i2 B. S$ O  o' Jset(HH1,'color','b');

HH2=get(AX(2),'Ylabel');+ s$ I  o9 s6 u# l/ H
set(HH2,'String','Right Y-axis');( {) O0 [$ u( Z4 H  Y
set(HH2,'color','r');

set(H1,'LineStyle','-');( }7 b  x* b3 c' r: N
set(H1,'color','b');
, k4 B& g  G% tset(H2,'LineStyle',':');
8 R. H8 y* \# n5 B( zset(H2,'color','r');

legend([H1,H2],{'y1 = 200*exp(-0.05*x).*sin(x)';'y2 = 0.8*exp(-0.5*x).*sin(10*x)'});/ W; N9 `: q4 k! c  O$ P; B
xlabel('Zero to 20 musec.');
8 ^8 z" \3 g4 _title('Labeling plotyy');

0 Z$ V- H+ d- L* n$ x9 R
  e) O5 E6 _" w* _9 X  ~0 R

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

A:如果只是想让plotyy的图美一些,可以使用其如下形式的调用方式:9 B9 H( b" @7 F* u) \/ b/ K7 h
[AX,H1,H2] = plotyy(...)
9 h( I" S6 l; j其中AX(2)就是右边Axes对象的句柄,拿到它以后就可以set或者get来处理了,也可以把其ytick关掉。

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

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

A:这两个FUN代表plotyy不一定要用两个plot,比如下面的例子,一条曲线用plot,一条用semilogy3 z" o! m2 B' V* X) x& w( L

/ U; s) v( b! M3 Z( k5 Ix1=1:0.1:100;
5 m6 Z; N- D/ K3 _( D& r5 j# T( Px2=x1;8 u9 I0 R4 o1 D! S" O
y1=x1;% A/ @; F: t- ~# R
y2=x2.^3;
: X- @) p; F2 nplotyy(x1,y1,x2,y2,@plot,@semilogy)


4 R- i; S2 y+ o" G  w' N0 P4 c& i9 ?& s) W

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

MATLAB画双纵坐标

7 W6 S* h. k% H& {: U* `

具有两个纵坐标标度的图形- h; j6 _4 F9 ]% w* R
在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。调用格式为:  T; v: Q7 u2 E+ N7 z
plotyy(x1,y1,x2,y2)
4 E! ?: J1 @3 q+ h3 ]其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。

双y轴坐标可以用plotyy(x,y1,x,y2)来实现8 M: S6 C7 f# Y: g4 V
双x坐标可以用. Z; [! T0 W+ N+ p! |
set(gca,'xaxislocation','bottom','xticklabel',{'0','1','2','3','4'}) (假设x轴的标注为1,2,3,4)
, e# j/ Z0 {' mset(gca,'xaxislocation','top','xticklabel',{'0','1','2','3','4'})
: C  F8 Q0 i9 `进行相应的设置

【 * 例 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>

9 ~6 P: b' H7 @8 G2 q  }- d
% q# Y# E8 [, r* X3 K7 R6 s

) x. o7 R' F; V1 z. P' R

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

实例(已验证):

clc;  V/ \' M8 m( r  `/ D4 ^$ C
clear all;
! S$ S: G: F1 a, Bclose all;
- U3 H0 n  y; K: rx=0:0.1:2*pi;
4 z6 D7 K, A2 ^1 Iy1=sin(x);6 b8 Y# T1 J% J( \
y2=cos(x);
; Z  g7 Y% d! y  j, C7 |[AX]=plotyy(x,y1,x,y2);8 k# p/ `  O: B3 ?9 }( i
set(get(gca,'xlabel'),'string','X-axis');
* _# Y$ ?" L3 o$ V4 R+ Lset(get(AX(1),'Ylabel'),'string','left Y-axis');
3 X- O# c1 J) i7 {, |7 ?: T% \set(get(AX(2),'Ylabel'),'string','right Y-axis');
# g# @- g; J0 X0 h4 P2 kset(gca,'xTick',[0:0.5:7]);" A! Y+ {) x4 X
set(AX(1),'yTick',[-1:0.2:1]);9 ~+ x; h* ^; ~
set(AX(2),'yTick',[-1:0.5:1]);

尚存在问题:这种设置方法,对各个轴的最小刻度单位可以设置,但是刻度范围(x取(0~7),y1取(-1~1))不能设置。
* ^' o* h, x& ~- t2010-12-23修改


0 ]+ G& q0 s, v

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

clc
* {* ^6 k5 P. C% U6 Vclear all
6 t1 l3 P9 K; o& Lclose all
- U7 }: G- D: h# |, [" @% O9 srunoff=[10700 11400 15800 22900 43100 40700 50500 46000 41800 35000];
9 Q% z) _' j4 n0 ?  msed=[0.105 0.094 0.156 1.264   0.363 0.429 0.731 0.682 0.654 0.290];
+ ?6 y3 J4 N6 {; S# _m=1:10;
7 [' ~2 |, h) e$ O[ax,h1,h2]=plotyy(m,runoff,m,sed); %h-- line handle
; D* P% c" E& I5 _set(get(ax(1),'Ylabel'),'string','Runoff (m^3/s))','color','r') %y15 K* i3 {5 W5 X/ R, P: d7 Y" g
set(get(ax(2),'Ylabel'),'string','Sediment concentration (kg/m^3)','color','k') %y2
! L7 t7 P2 e2 B: I; |xlabel('Month')
1 h  M# g& J5 Z5 }1 Uset(h1,'linestyle','-','color','r');   & P& N; x$ D& x0 K, L+ y
set(h2,'linestyle','- -','color','k');* \% H/ W- P4 |8 w
legend([h1 h2],'runoff','sediment concentration') %标注两条线
5 w0 M; e' L+ S- R! N+ X* \) Xlegend('boxoff')
" o* \( h  I: r! ]% box off' a0 W, G7 X5 e
set(ax(: ),'Ycolor','k') %设定两个Y轴的颜色为黑色
8 }  `0 |0 U% v1 g2 G) lset(ax(1),'ytick',[0:10000:100000]); %设置y轴间隔* |  A4 E1 j( ^3 O
set(ax(2),'ytick',[0:0.1:1.5])$ x2 @8 K7 W% H  @1 H! l% k
set(ax,'xlim',[1 12]) % 设置x轴范围
/ i- M5 [( @+ [) L5 Hhold on
7 T5 e7 @% z, {. Y: n5 y& vscatter(ax(1),4,22900,'r*')
8 B. |3 u% [- ?4 Q6 @3 eaxes(ax(2));. r  b/ b/ ]/ D9 l' ?6 {
hold on
# b6 u. q  {. Pscatter(4,1.264,'ro')

/ y, Y6 j. n! R9 z

3 h  d# J" L5 a0 ^# o1 r

' I- ^( J4 b: F# a0 r: Q8 ?0 c2 o6 x8 b7 p! n

; [' U9 W3 U5 v* X9 S2 ?& l  Q$ w0 I

' x: i) d! w& g: }  L7 ]* i
6 W- ~, c. F# c: S. b

0 C' m% s3 y8 y7 Y, z4 ~/ o5 B/ d3 K5 ~
  • 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-7-23 07:52 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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