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

如何在MATLAB中将subplot绘出的子图放大显示

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
        有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?
- t5 i$ n" C1 T, T        首先你要弄清楚matlab中figure 的架构" E% Y2 {4 ]! i! g- o+ P' N
9 W; v; p& K  ^- p& W
        close all
6 C5 h' d0 ]4 d! h' g        x = -pi:.1:pi;$ h& G( _9 Z$ r) A# ~
        y = sin(x);
# p3 E4 y& }( U+ S8 t5 I- Z        plot(x,y)
; A8 {3 B% N' N9 m1 H8 s9 R2 _4 |7 l9 |7 T9 Q8 c+ e0 `
        当以上指令执行到plot时- I8 z2 j4 b- J- \, @
        matlab会create一个figure
5 v% f* s, [4 c6 H" L+ ^! v) B        再createn附属于这个figure的axes
+ l, A9 ~* h1 j9 L- {/ ~: |! I        然后在这个axes上画图
& u" ?1 F1 K3 W# s) d% b- f
1 U7 y! G8 w2 t3 D% }$ e        close all
+ k# r' x/ C) {4 o        x = -pi:.1:pi;/ q; _0 o' R" @! X1 G2 o1 Y
        y1 = sin(x);
1 m) W9 g; _4 s1 d) \' |5 F' u3 k        y2 = cos(x);
' c1 b; ?- i5 W& k% H0 s+ Q/ w        subplot(2,1,1);plot(x,y1)
' D+ c7 c! ~6 X# W1 `        subplot(2,1,2);plot(x,y2)! N8 Q& \0 `8 K" X6 m& a

9 R7 ]8 C+ ]' N8 M2 t: I; {        当以上指令执行到subplot时
- R+ T  v5 t7 y        matlab会create一个figure8 G7 ~' ^9 |. l& Q
        及 "两个" 附属于这个figure的axes( b1 L' F4 T2 q( Z7 x, A
        plot会自动在第一个axes上画图
3 ~6 o; Y% p; M% m9 ^
4 u. x6 c; E1 ^  z        第二个subplot会跳到第二个axes9 }/ K0 O8 }6 R, N
        也就是去activate第二个axes2 t8 \! q3 _5 v' R4 Z9 t/ H
        接下来的plot就在这个axes上画图
: r$ L, @  Z! Q. _" a1 w9 ^1 Y. N2 L
        请先保留这个图以便进一步解说
. Q" J* x3 n: ?7 E5 c  ?, @
8 D1 v. U8 ?. M        好...所以你现在要做的事情是
7 o! ~5 x; x* n        把你想要的axes放大到整个figure
4 K+ z2 t" T  i( n        并把其他axes删掉0 d2 {' j0 e, C7 n' N" F* Y

5 W- ~/ G4 a' j, E& w) {        首先你要找到这个figure下一共有多少axes( d) g% z, L" F( h# h7 T0 `
        我们要用get指令
5 B# [  z6 \! F1 R( T) h        t=get(gcf,'children')
, ]7 r) f6 N: A- f# A8 T        get用来取出物件的property
6 x, V9 a+ t( _% h        gcf就代表目前active的figure
2 w' o2 I6 e& g% a        children就是figure的其中一种property* p: V& ]6 z9 E; E* X( u3 \; ^
        在这里就代表所有归gcf管的axes$ }2 n6 E1 @+ O* i6 V, ~

9 T: \, h. O' B. m( s        你会发现t是个长度为二的vector
5 x5 d) m: h5 s        因为我们已经用subplot创了两个axes- {- F  E5 j0 l+ f  D% A6 h% R' A  w
        如果执行delete(t(1))' D  `6 D$ g/ V$ t" ^
        那cos的就会被删去  C* e& [2 \$ ^8 e6 |

% e7 o, Y. c1 d% x: p- W        接下来得把剩下的axes放大# k+ J. P: W  H9 I( g# V
        set(t(2),'position',[0 0 1 1]); a" Z8 `4 i/ N  u
        set就是重新设定物件的property6 }. K& u- h) c4 ]
        t(2)就是我们要设定的axes
( F. S- W0 r" j2 y" A" x1 E        position是axes的其中一种property
. p9 o4 P: l/ g5 S; F        [0 0 1 1]就是我们要设定的值" C0 f8 @9 x# t; C/ u
        分别代表左底宽高
+ y: d# |9 U+ i* B- I1 [6 K) X# b6 y' u+ S2 P
        因为你希望放到最大7 H, ?" o8 Q. L" g6 x' ^
        所以 "左边" 距离figure的框要是零; a, s& l: f* A1 O0 [& b  @' D
        而 "底边" 距离figure的框要是零5 n+ e6 S. q2 T! D+ W8 g; d# ~
        宽度及高度都要是 100%- X/ r( B, Z; M) y3 F6 b
/ T8 L- g  |) m4 Z/ x
        这篇讲的很简略) P& b* k! d+ Q& M  L
        你应该把matlab help中的Graphics翻过一次; e; A3 `0 k% x* s
        尤其是Handle graphic Objects0 J: v  J8 z9 f, n# v
        来互相对照( b( @& i) y1 u" `, ?6 O  E$ w! j( `; [
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-4-7 18:45 | 只看该作者
    在MATLAB中将subplot绘出的子图放大显示
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 01:51 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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