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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
        有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?
  J+ a/ Z. o& z- n9 K9 W        首先你要弄清楚matlab中figure 的架构
. |5 B. L* ~4 y5 b
( L- O0 {: I/ H5 Z/ }) r  s( {, V        close all2 Q1 G9 s% w4 f
        x = -pi:.1:pi;8 D- S8 d' f9 @
        y = sin(x);" `; c6 e* b: ~6 L# X& H
        plot(x,y)
, B" p+ [5 ~; o! Q( P; d' ?) E" B+ M6 C0 G: f
        当以上指令执行到plot时
5 Q) n' R' D1 h: c0 O9 _; I# R        matlab会create一个figure- j! e( Y- d' E/ b& o
        再createn附属于这个figure的axes
' d7 U3 y8 y% Y. z        然后在这个axes上画图
- [+ B2 X3 _0 ~' U5 J* X: W& d
3 m4 c, r1 Y, N        close all+ v. [6 {. v" R# Y
        x = -pi:.1:pi;
! t2 v$ B& Z  ?' ^  C6 x: J        y1 = sin(x);
# k5 Q' F* N3 b" L. _8 n4 g$ t        y2 = cos(x);  C! N) m- X" S1 j# ?- V5 W
        subplot(2,1,1);plot(x,y1)
$ }7 i% y6 E" C, ^        subplot(2,1,2);plot(x,y2)& P: p. m1 B9 x* [3 m
/ q9 ?6 {/ f& C. j/ W
        当以上指令执行到subplot时8 f+ P) y  k2 w
        matlab会create一个figure
, H) }$ T( c* B( N) Q        及 "两个" 附属于这个figure的axes
* l! c! x6 i$ S! K( v9 h3 j        plot会自动在第一个axes上画图! K) Y% ~1 U/ v1 M
) ~: w' j( z+ ^7 X6 U
        第二个subplot会跳到第二个axes( _3 m8 M9 l0 o! k& S0 j  X
        也就是去activate第二个axes4 {4 g( h0 j: @( y0 t/ X
        接下来的plot就在这个axes上画图
- m' l: U5 j6 f: j  _; }# N8 T: o0 L' B; |$ {0 E
        请先保留这个图以便进一步解说
$ c0 R: @3 k, Y% X9 f
) i6 n+ g' D$ ]- v* W        好...所以你现在要做的事情是" v* H* }1 F4 q1 W
        把你想要的axes放大到整个figure
$ ?. Z/ w2 ?$ X' Z* v, J- D6 s        并把其他axes删掉
; i  m, o  r) x  p( B4 A& Q8 l2 f
* |; O& a# o8 n        首先你要找到这个figure下一共有多少axes+ C2 ]: ^5 e, v0 B$ i+ O9 f& [
        我们要用get指令
1 Y6 x8 y2 ^! D& Q! Q        t=get(gcf,'children')7 J% ^7 A2 q1 m: K/ ?9 g
        get用来取出物件的property8 J. R  {- }7 p/ }* J3 L2 k  T
        gcf就代表目前active的figure; M8 C2 k5 s% @+ s9 I3 ?/ j" q: T
        children就是figure的其中一种property) z+ S# }3 ]' x& S0 V4 `( U
        在这里就代表所有归gcf管的axes
; f( J7 C; X( C8 r' ^7 N+ ^$ ~7 D2 S8 S, x
        你会发现t是个长度为二的vector% y- @: b5 w/ n" f' W
        因为我们已经用subplot创了两个axes2 V5 @' W. f* l' b
        如果执行delete(t(1))7 e5 Q7 ], T$ W. _$ V' _: t8 S
        那cos的就会被删去
" S. ?  }2 m! w3 v6 M( S; @7 ~% t; V. Z( r2 A) f% `
        接下来得把剩下的axes放大
0 N2 _1 [- J8 [) V! W4 H6 \* x        set(t(2),'position',[0 0 1 1])
: _$ B, Z: D" q& h        set就是重新设定物件的property% }: G" \- ^  ~5 e" `
        t(2)就是我们要设定的axes3 g$ K. e+ ~8 J. @8 i/ ]* L
        position是axes的其中一种property
1 r7 [' h5 v6 s. o        [0 0 1 1]就是我们要设定的值
  y  y* m; J3 r3 k2 c% n' w        分别代表左底宽高2 ~8 D+ W. k. y& b

9 Y' N* K& n0 V1 a( w& B% [6 _- E        因为你希望放到最大2 y: ^" M& N# k, J8 w
        所以 "左边" 距离figure的框要是零
. t4 v( H! ^. Q* M        而 "底边" 距离figure的框要是零2 S4 T! @1 q! L" M  d
        宽度及高度都要是 100%
# w* k1 m2 d/ f! }+ R- O% O% w
) n- _1 t  E1 R& Q9 {9 T        这篇讲的很简略* P; y* a: K9 Z* d8 o5 D, H/ G$ \
        你应该把matlab help中的Graphics翻过一次6 E2 M3 H: u; j+ c+ L4 _
        尤其是Handle graphic Objects$ Q: ?3 z( I8 x; B, w
        来互相对照
- X! W5 ?4 L6 z; I* r  B
  • 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-6-23 02:37 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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