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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 thinkfunny 于 2020-4-17 09:39 编辑
; Z, u$ I! \. r) W4 C2 z  A- }' v2 F

Matlab plotyy画双纵坐标图实例

x = 0:0.01:20;
* I$ Q# \) e# E$ u$ ?y1 = 200*exp(-0.05*x).*sin(x);+ ~- l9 b8 W$ }# r7 i- q
y2 = 0.8*exp(-0.5*x).*sin(10*x);0 o% C. i5 y& U# v& B+ e  x& @
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

set(AX(1),'XColor','k','YColor','b');
7 r8 d* y0 S) a/ ^! }. @) L/ [- E. Jset(AX(2),'XColor','k','YColor','r');

HH1=get(AX(1),'Ylabel');
: q6 {, ~5 \5 {4 O6 _9 l4 M6 V: l3 }7 Gset(HH1,'String','Left Y-axis');/ P, @6 c3 E: \0 J
set(HH1,'color','b');

HH2=get(AX(2),'Ylabel');  K4 ]# {5 I0 @
set(HH2,'String','Right Y-axis');6 ^% s$ |$ T& H/ @
set(HH2,'color','r');

set(H1,'LineStyle','-');4 W. i* m; Z, X+ u+ S
set(H1,'color','b');- o+ a* y. Q. x" i" J
set(H2,'LineStyle',':');7 j' F. h7 R3 B' A2 q
set(H2,'color','r');

legend([H1,H2],{'y1 = 200*exp(-0.05*x).*sin(x)';'y2 = 0.8*exp(-0.5*x).*sin(10*x)'});  \; y+ v0 N7 O
xlabel('Zero to 20 musec.');# O# |' C- M  @/ X  ]
title('Labeling plotyy');

8 F+ z& h- ~7 E/ `4 n- g4 E
  M& C1 ?: m- Y' x0 I

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

A:如果只是想让plotyy的图美一些,可以使用其如下形式的调用方式:
8 V, [; H7 P: t9 N[AX,H1,H2] = plotyy(...)  |5 v/ u0 L5 x! ^4 G. J; u
其中AX(2)就是右边Axes对象的句柄,拿到它以后就可以set或者get来处理了,也可以把其ytick关掉。

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

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

A:这两个FUN代表plotyy不一定要用两个plot,比如下面的例子,一条曲线用plot,一条用semilogy2 ~# x# ]5 ?( I0 _

' E5 H9 L. U! h. Hx1=1:0.1:100;! {# M% y; M! n' r5 `/ {
x2=x1;
' w$ Y) j- N$ M# _y1=x1;
  w! x. I; S; j# T6 s  h8 K; J5 jy2=x2.^3;1 `- R  o4 O7 }
plotyy(x1,y1,x2,y2,@plot,@semilogy)

. T; m' J( z- V. B2 Z

9 y( |4 c9 H' Y7 q" n

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

MATLAB画双纵坐标

# m" W, ^. t5 M. D+ Y  w' q' {( v

具有两个纵坐标标度的图形4 F" a% w: l% C6 Z5 L; R+ H# t8 V$ a
在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。调用格式为:; n% m6 B) v( K2 u* Y" c
plotyy(x1,y1,x2,y2)
- d1 {8 {. l' Y. Z% ~& _4 D& K其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。

双y轴坐标可以用plotyy(x,y1,x,y2)来实现
% j* r3 v, {1 y6 d  g  G9 i双x坐标可以用
6 @. s3 |- ~$ Q* {set(gca,'xaxislocation','bottom','xticklabel',{'0','1','2','3','4'}) (假设x轴的标注为1,2,3,4)
- R# i6 n) N/ Tset(gca,'xaxislocation','top','xticklabel',{'0','1','2','3','4'})  z. G4 V% v% ~+ D7 R2 Q
进行相应的设置

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


7 r! y) N! ?" \' Z2 d" ?0 j
6 e7 ], V& h1 q9 u( B2 l


  {9 L" X3 @" c( }: m# f& F8 W" D

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

实例(已验证):

clc;8 m% Z7 u, G  @# \+ n6 ?
clear all;8 @: a+ x* v& o' I/ i& s
close all;
& {# H! B' P( X5 y9 kx=0:0.1:2*pi;
7 G% g4 b7 L; }5 [' xy1=sin(x);  l- ]% U5 `0 N" `' L4 _
y2=cos(x);6 G5 `6 w) E2 D, W7 |
[AX]=plotyy(x,y1,x,y2);& {5 N: ?: ~8 g
set(get(gca,'xlabel'),'string','X-axis');
4 L( o  c. Y1 V/ Pset(get(AX(1),'Ylabel'),'string','left Y-axis');7 O& f0 {+ c* p
set(get(AX(2),'Ylabel'),'string','right Y-axis');( Z% H# k, c/ z; B1 Y+ f0 W# F+ W
set(gca,'xTick',[0:0.5:7]);
2 R7 z: ?, t2 s. a5 [set(AX(1),'yTick',[-1:0.2:1]);" o5 b/ v0 Y" z
set(AX(2),'yTick',[-1:0.5:1]);

尚存在问题:这种设置方法,对各个轴的最小刻度单位可以设置,但是刻度范围(x取(0~7),y1取(-1~1))不能设置。
- S; N, C! P0 @- V0 `$ h8 N# j$ K* {7 z2010-12-23修改

/ {. r# ^( l* @3 v

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

clc
+ `. @* {4 g$ c9 n$ Qclear all: V( h; o6 r4 y5 e1 T& Y
close all
5 V+ o1 O) J& }$ B0 |& vrunoff=[10700 11400 15800 22900 43100 40700 50500 46000 41800 35000];
2 }# O" j) X9 s' q2 H8 ~1 rsed=[0.105 0.094 0.156 1.264   0.363 0.429 0.731 0.682 0.654 0.290];2 H( _  |0 m7 `8 [
m=1:10;3 p. l! Y  x* r; b
[ax,h1,h2]=plotyy(m,runoff,m,sed); %h-- line handle5 I3 M  k+ M9 m! g
set(get(ax(1),'Ylabel'),'string','Runoff (m^3/s))','color','r') %y1
8 q2 u% n, O+ S% wset(get(ax(2),'Ylabel'),'string','Sediment concentration (kg/m^3)','color','k') %y2
) K/ C; b3 K+ |9 S5 R& J1 e- Q. ^xlabel('Month')
7 {+ R4 G: J8 [! L2 o" _1 }' E' pset(h1,'linestyle','-','color','r');   8 o! d* y6 c: W* X6 e3 F5 G: h
set(h2,'linestyle','- -','color','k');
, p( T0 J. i1 K% |1 G% Ulegend([h1 h2],'runoff','sediment concentration') %标注两条线5 q0 ^& _0 y# C1 s; i+ j
legend('boxoff'): y; S) y2 Q# v# ?4 c
% box off! q: ^- i/ V* x0 g: [
set(ax(: ),'Ycolor','k') %设定两个Y轴的颜色为黑色
7 r! C- h2 }; b% c4 M: }set(ax(1),'ytick',[0:10000:100000]); %设置y轴间隔; n) I0 C7 x3 A9 }8 B
set(ax(2),'ytick',[0:0.1:1.5])
& Y, @& u0 Y! uset(ax,'xlim',[1 12]) % 设置x轴范围
3 U% G; f3 G! H, t7 G7 ?hold on
% p$ C4 I+ z2 ^3 tscatter(ax(1),4,22900,'r*')
" i: k% b0 `8 Y4 zaxes(ax(2));
& H) B4 N  P; h" Y- `& J, X  M1 h* zhold on/ P& l# q0 d, D
scatter(4,1.264,'ro')

$ d' Y! W7 J8 \0 V' a5 q- @

2 }  X+ i: Y1 S! o6 w
" p; j/ C" h, w8 h1 F
1 C  K+ }1 ~1 I9 L. C
) J; R( c. F( r
. r& ]4 J. i+ b3 ?1 p/ k* t

# K6 B$ S  E1 V* J3 \

7 _) `& @- d) J0 d' `
9 H* O5 w  r# U8 E3 d+ ~6 t) `' T* z) `  H; V, ^* ^
  • 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 04:40 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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