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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 thinkfunny 于 2020-4-17 09:39 编辑
4 `, t; p0 ^0 w) f  g/ ^  [: r5 a9 @) \8 v

Matlab plotyy画双纵坐标图实例

x = 0:0.01:20;
( |* }6 {5 Q+ l2 a6 z6 uy1 = 200*exp(-0.05*x).*sin(x);. ~8 s( ]! [( u4 L: I
y2 = 0.8*exp(-0.5*x).*sin(10*x);0 u$ K: d0 z0 d" b6 b: V/ v' W
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

set(AX(1),'XColor','k','YColor','b');
. X- E- t' P/ m8 Sset(AX(2),'XColor','k','YColor','r');

HH1=get(AX(1),'Ylabel');( B/ }1 @4 n6 Y) ^& d$ h! U+ p
set(HH1,'String','Left Y-axis');
! P/ w- y! K# a& _set(HH1,'color','b');

HH2=get(AX(2),'Ylabel');
5 s/ Z. l: `8 [) h7 h& Q+ t" hset(HH2,'String','Right Y-axis');
4 |5 m: t" P* q" S! aset(HH2,'color','r');

set(H1,'LineStyle','-');% L$ D! V$ @+ \& b4 T5 k% E  f" E
set(H1,'color','b');
2 X5 C0 y$ u' |! _/ V+ `set(H2,'LineStyle',':');
) R3 M+ n* ?- L: Xset(H2,'color','r');

legend([H1,H2],{'y1 = 200*exp(-0.05*x).*sin(x)';'y2 = 0.8*exp(-0.5*x).*sin(10*x)'});
+ z* D8 b2 X! G3 ]xlabel('Zero to 20 musec.');
0 E: J  [' b. n1 Ntitle('Labeling plotyy');

  k4 J7 U: |) ?: z
( B' c  c" Y$ |

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

A:如果只是想让plotyy的图美一些,可以使用其如下形式的调用方式:$ g* q3 Q, Y/ j) l
[AX,H1,H2] = plotyy(...)
4 n1 }- F7 s( @. m其中AX(2)就是右边Axes对象的句柄,拿到它以后就可以set或者get来处理了,也可以把其ytick关掉。

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

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

A:这两个FUN代表plotyy不一定要用两个plot,比如下面的例子,一条曲线用plot,一条用semilogy
& H, E; g! H6 u
- f7 L( }7 s; m; Q! B0 cx1=1:0.1:100;) N4 S: p7 d) c7 c$ _. M
x2=x1;
( s0 v  O( }$ c3 i$ F1 B& J  Jy1=x1;
$ ]4 i# G( |. ^' j" N( My2=x2.^3;+ Q( Y0 D( s8 c- ~  H
plotyy(x1,y1,x2,y2,@plot,@semilogy)

6 O; @) x- b" q6 ]
9 e6 ]4 W; p% w6 Z7 u' V. D1 J8 J

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

MATLAB画双纵坐标

- v; O0 C$ r9 P( A$ |. [5 x

具有两个纵坐标标度的图形
7 z6 m6 k! s0 w2 e7 B) @6 e在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。调用格式为:# B. [9 p- J8 y2 f2 ?8 c3 i
plotyy(x1,y1,x2,y2)
; ?5 B. \3 ^, u+ C# ~5 Y& u3 p其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。

双y轴坐标可以用plotyy(x,y1,x,y2)来实现- U7 a- {; M( c% w/ k- f
双x坐标可以用# `5 x% F3 M# I0 y
set(gca,'xaxislocation','bottom','xticklabel',{'0','1','2','3','4'}) (假设x轴的标注为1,2,3,4)! {  c8 h' n2 f5 `% V5 B
set(gca,'xaxislocation','top','xticklabel',{'0','1','2','3','4'})
, X! ?. d- L# G% a( j7 b# I进行相应的设置

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

# [: e/ {! u6 B; W8 u, o  K& q9 s+ I
0 ^7 E4 U9 P4 ]1 Y0 h+ G


; e8 ~0 T2 O! _6 u  @6 d( i4 }! I

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

实例(已验证):

clc;# ]# r. L" |5 R  g# c& S
clear all;
( ]' E/ |% V9 ]) {) R, [) i, Zclose all;
$ I2 D8 E. P% ~2 h0 |4 L* y4 m% |x=0:0.1:2*pi;
6 J7 o2 l! x# |& R3 S9 i2 Ty1=sin(x);
. E- M( s8 n/ e+ A2 E' a0 ~# H, Qy2=cos(x);; u3 ^$ J  y/ D0 D$ R
[AX]=plotyy(x,y1,x,y2);
) p* g4 q2 x& W7 f: h4 ?7 b* J2 S; Qset(get(gca,'xlabel'),'string','X-axis');/ H4 U1 u, O4 r0 [& T% q
set(get(AX(1),'Ylabel'),'string','left Y-axis');7 m: ^9 h- P  |1 ^" G9 Y
set(get(AX(2),'Ylabel'),'string','right Y-axis');, M$ K, X# A; i5 V2 x
set(gca,'xTick',[0:0.5:7]);
# K. L6 {4 k9 mset(AX(1),'yTick',[-1:0.2:1]);3 @+ @: \% s, e: s# j
set(AX(2),'yTick',[-1:0.5:1]);

尚存在问题:这种设置方法,对各个轴的最小刻度单位可以设置,但是刻度范围(x取(0~7),y1取(-1~1))不能设置。
+ c: |* u; Z! J3 E2010-12-23修改


9 {3 M7 Y5 N" o; A

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

clc4 S3 O" R9 R  A# w+ K" ]7 p0 g
clear all
5 V; p" p2 G1 t8 hclose all0 e/ }- g* V! n6 G
runoff=[10700 11400 15800 22900 43100 40700 50500 46000 41800 35000];$ j4 @. s' \7 `5 I! R" j# Z
sed=[0.105 0.094 0.156 1.264   0.363 0.429 0.731 0.682 0.654 0.290];! L1 L1 F) Q4 m- j/ [, M
m=1:10;( g" f$ j( H2 s
[ax,h1,h2]=plotyy(m,runoff,m,sed); %h-- line handle) O  o0 y1 p2 z1 V- y* `
set(get(ax(1),'Ylabel'),'string','Runoff (m^3/s))','color','r') %y14 c3 h- E% |9 Q" Z: l/ z
set(get(ax(2),'Ylabel'),'string','Sediment concentration (kg/m^3)','color','k') %y2
( b" V! h4 S" h" w- ~6 L/ jxlabel('Month')
8 T! I3 o8 ]4 a) p. Kset(h1,'linestyle','-','color','r');   $ c# |- c  o# g% y
set(h2,'linestyle','- -','color','k');
" _. W7 H5 Z% U( blegend([h1 h2],'runoff','sediment concentration') %标注两条线
* h& g8 F6 b: Y: i8 dlegend('boxoff')
! I# A% `5 k: Y5 D  A+ T' T( \% box off' X+ s1 a& b/ P" F* G
set(ax(: ),'Ycolor','k') %设定两个Y轴的颜色为黑色  q1 G3 q+ e0 x9 K) x
set(ax(1),'ytick',[0:10000:100000]); %设置y轴间隔
$ ?( c- Y8 J& S! h( ?7 Jset(ax(2),'ytick',[0:0.1:1.5])
) L" P- W8 }+ ]4 o& U, M. Tset(ax,'xlim',[1 12]) % 设置x轴范围
6 H/ {$ q, \6 y2 Phold on
8 U) u3 X1 O: Rscatter(ax(1),4,22900,'r*')
1 _, s( E8 {$ L' q! c3 uaxes(ax(2));5 ^2 f6 k: s. m
hold on8 U3 M8 ]9 H5 n6 D& A; K
scatter(4,1.264,'ro')


, L; A, |# A; N' I5 o


% n# H4 @( ], y: }( `: q' e0 j5 [# a# o. `! s& s+ P. C3 S: r
* F1 j- I5 c) F0 B. ]
2 |4 z& s( x* Q) h& d
7 Q- K4 F# ^9 G" ]: S) J& }! O

- H$ p/ L6 W7 B! x$ ^3 O
; ?/ k& X$ B: [

  h' \# r- f4 Y6 T
- ~: D/ j( i$ n+ o
  • 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-8-23 15:46 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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