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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
        有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?
! e. F4 j* p, R; L5 o+ `4 O; c2 {* o        首先你要弄清楚matlab中figure 的架构
0 p. R/ @, }7 o, r0 R4 w
# r0 J; Z9 j7 b0 X& w: T) Z4 ?0 |& u        close all
/ K' q, `- q9 a5 s        x = -pi:.1:pi;: D( ~5 a0 A- E  _
        y = sin(x);
5 s3 l. Z$ A+ K5 ~$ k# B( w        plot(x,y)8 G8 ~$ j9 N2 C9 t

0 p! K3 Q. n6 s% U' m4 p9 `9 H        当以上指令执行到plot时
& X: y  D3 _' \6 L2 g- a0 _        matlab会create一个figure' Q6 k$ x" h; X" z1 |
        再createn附属于这个figure的axes2 t- p8 r0 r2 n' g  u) B9 {
        然后在这个axes上画图
# g9 G/ M* C5 `( J+ }6 M7 i$ D& Y/ S  I, E; j* S; G. m: J
        close all5 W6 Z" W$ ^/ O4 ~7 g
        x = -pi:.1:pi;
& f1 A6 \' w  X. {+ F/ I8 s        y1 = sin(x);/ y% K5 U' Q/ i# ~6 S/ u: l) }
        y2 = cos(x);
0 `/ V- a4 ~6 n6 Q, l* E% f% d        subplot(2,1,1);plot(x,y1)
6 ?" S" ]: u( y, O' w        subplot(2,1,2);plot(x,y2)+ [" R# c5 v6 q. ]

/ X6 O' |4 L. X- E4 G( |) x  V, ?" w        当以上指令执行到subplot时
7 |" G* B! D( B8 L4 x4 k: _* k        matlab会create一个figure$ e* f1 I; R$ q9 n' C$ `2 B
        及 "两个" 附属于这个figure的axes
+ }# r% f2 D' w% L        plot会自动在第一个axes上画图9 E/ o1 P1 A7 a) g- l( C( }
. V: E1 M! z8 W
        第二个subplot会跳到第二个axes2 ~$ ]7 f% r$ a
        也就是去activate第二个axes
( C4 f/ c1 F' @; [: x        接下来的plot就在这个axes上画图2 i0 \! \  T( n6 y+ a6 n1 K

- o; U! \1 L) Z        请先保留这个图以便进一步解说) a& R$ e' s3 O2 o

5 \9 y& Y7 d* {% @( d' l8 W% N3 F        好...所以你现在要做的事情是
' V. m- a$ N: o3 f1 K6 I% |% N        把你想要的axes放大到整个figure, z0 f- Y2 n# Q/ R
        并把其他axes删掉9 D) d+ c0 D  D3 y& h; Z/ t. k
  s) m) q; y) s) B$ D* ]1 s
        首先你要找到这个figure下一共有多少axes: W" S4 @: B" z3 t% O, N. [
        我们要用get指令& W: Q* U' D* E& F( h5 Z; `4 m* c
        t=get(gcf,'children')
6 P5 u8 l! v2 F) c        get用来取出物件的property
$ S" o  M0 f1 Z  U# o% }        gcf就代表目前active的figure3 Y6 }1 J$ `" h, P7 V% k
        children就是figure的其中一种property
. O9 Y0 `4 U+ z' G% p        在这里就代表所有归gcf管的axes
3 R. x7 J" q7 V" I) V5 `( j" r! H7 O
        你会发现t是个长度为二的vector
! F& p: I6 P" `0 }8 w        因为我们已经用subplot创了两个axes
0 i* D: \& P2 e, _        如果执行delete(t(1))& W6 Y; r( T( Q& g/ L3 |/ Q8 k% [. f
        那cos的就会被删去
4 o3 x, v8 _$ a& ]1 E$ z
4 f% W8 i& N3 D& y& o        接下来得把剩下的axes放大
0 U8 U4 k3 c# [0 r        set(t(2),'position',[0 0 1 1])+ r: o  n! }+ ?1 o. ?
        set就是重新设定物件的property
0 e. g  k) w- d1 V4 B# J        t(2)就是我们要设定的axes8 O0 W8 x+ b8 a
        position是axes的其中一种property
! B5 f% [& {% M; Z& g$ L$ {        [0 0 1 1]就是我们要设定的值
1 B3 P# D+ c- Y: B0 }        分别代表左底宽高& A& U1 Z, d6 t3 l( s1 Z) T4 q

9 b8 B7 a1 f& }& N6 r2 B/ W        因为你希望放到最大
9 r/ w: j- `, k/ P6 f+ _5 Q( ?        所以 "左边" 距离figure的框要是零, G' k  H' H% Q. V, L& C
        而 "底边" 距离figure的框要是零
3 Z$ z7 t" x+ `. W: B3 F" l        宽度及高度都要是 100%
1 e% C( S+ `; m" j7 f7 M/ P& W9 d" ]' Q% u; h
        这篇讲的很简略  t4 y, q1 i% S7 |) R: f$ s0 @
        你应该把matlab help中的Graphics翻过一次
6 U. ~# t) J$ N: M/ O; G/ [3 _        尤其是Handle graphic Objects- n! p/ s; n- i6 ?5 @
        来互相对照
9 D2 V" ~- A) s/ ^# f4 _
  • 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 10:43 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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