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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
        有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?' l" [0 M$ m; X
        首先你要弄清楚matlab中figure 的架构
1 L, L8 w2 ]( t' s, l, r7 ^, x+ ~) }3 e8 }* a
        close all
/ `, Q" d8 j! o( H        x = -pi:.1:pi;, H- G0 }4 S0 H% I. I. d
        y = sin(x);! l7 [9 K# K4 P- I) m( Z  |; P
        plot(x,y)3 ?" k; n* ]! M4 A. Z1 A) O
8 z! d/ B5 d% o8 P: X- B$ a* q% ~
        当以上指令执行到plot时7 h5 }& j/ _6 x$ S
        matlab会create一个figure
( \/ n. R3 q5 r0 q  ~        再createn附属于这个figure的axes
9 h  Q! `+ S: T8 a8 i        然后在这个axes上画图* S1 A2 e+ v. r

' ^, n; B% A  p9 ^" U) r" Y/ H        close all* [/ t9 [& y; @) q
        x = -pi:.1:pi;
* v* r, x1 y* _' M        y1 = sin(x);7 Q' F% V8 r8 t% L* P6 U- ?% H
        y2 = cos(x);
7 B3 L" W2 Z) P( T6 \/ c, Y2 J        subplot(2,1,1);plot(x,y1)5 K8 J* K/ F( }) c' r# Z9 [4 |
        subplot(2,1,2);plot(x,y2)- w( E. S" K( M0 q; N2 u( W

0 E+ G& c! x2 K: ?8 J, W1 a2 ^        当以上指令执行到subplot时
6 _6 h3 x& a: [( K; `: a        matlab会create一个figure
& e  m( L* E' T" a' \        及 "两个" 附属于这个figure的axes! c& J( h( s' |# J, W
        plot会自动在第一个axes上画图2 r$ ]/ H; _# A# j. ]

+ C  z0 ]4 O0 ~& R2 x/ T; `        第二个subplot会跳到第二个axes
5 U$ j' z% g  r# u! Z$ N        也就是去activate第二个axes$ v! g2 r2 Y2 s/ e5 N( l
        接下来的plot就在这个axes上画图. D: y: R; x( ~# _
" s7 X! u9 \3 Q+ @4 ?0 T
        请先保留这个图以便进一步解说
+ u/ `  u! c+ s) Y. f
  v6 R$ r2 N+ F& ?        好...所以你现在要做的事情是
  V/ G* S8 J+ b5 }        把你想要的axes放大到整个figure9 z( J( v4 |. m6 T. M3 b7 j3 X
        并把其他axes删掉
* U2 R4 H0 T! g' U$ {$ n# S
; y! p' Z7 ?+ I( j/ a" [        首先你要找到这个figure下一共有多少axes( _7 g; s% |4 `& Q* B5 c& \4 x. `
        我们要用get指令$ _% a* ~# |! ?# g( V9 M
        t=get(gcf,'children')
' u( [8 ]* |; t$ v* Y& j) j        get用来取出物件的property
1 k* l/ d1 G/ g2 D; @        gcf就代表目前active的figure
( I, t- k$ c- |        children就是figure的其中一种property: W; {6 \# s( x
        在这里就代表所有归gcf管的axes5 z3 ~# S! D) ]" J4 t0 e
; B$ h0 D3 }& U  _  U# y% r
        你会发现t是个长度为二的vector
8 m) i) }. i5 N0 ^' {+ w& O+ c/ R& h        因为我们已经用subplot创了两个axes
9 j4 a3 N- j: w6 ]/ U+ d9 {        如果执行delete(t(1))
) q0 W, W5 L" L6 L, y7 n        那cos的就会被删去
- [) z* Q- B) R8 N3 \, @8 ^+ n$ B. e
4 c. {  E  }3 w3 \& Q, s        接下来得把剩下的axes放大! k. E8 _% V$ i) g. l
        set(t(2),'position',[0 0 1 1])  ?' K2 W0 D- ]. E- |; R  ]4 d4 I
        set就是重新设定物件的property
) s, o' i; b1 Z8 P7 q1 D        t(2)就是我们要设定的axes6 \+ b; @  S/ }+ p  y
        position是axes的其中一种property. x" ~* W) Y7 D) e) g
        [0 0 1 1]就是我们要设定的值: i/ b6 u0 s  r/ s4 G5 l- m2 v
        分别代表左底宽高, ^" Z7 U) ^' B

) _: ~. _; [+ [. V" Q# H        因为你希望放到最大7 m- [3 ]) S6 C2 c( d
        所以 "左边" 距离figure的框要是零
( N3 J; ?: W% R& I5 s        而 "底边" 距离figure的框要是零
# A; t( n1 a5 M        宽度及高度都要是 100%
( I5 J1 ]0 L9 x, l1 Z! h8 o
2 A* o+ S5 S8 l+ x; J2 S        这篇讲的很简略
* |) h  t. y  w* ~# g: x        你应该把matlab help中的Graphics翻过一次5 F$ x  o% O5 `4 _
        尤其是Handle graphic Objects
# T8 @0 G1 ?1 B, H$ L        来互相对照
! X  R! a" [/ B2 i
  • 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-7-22 10:39 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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