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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
        有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?
" W) Q+ t  u  f% x        首先你要弄清楚matlab中figure 的架构
) y+ X0 e3 v# [+ y" c3 \) F
- T1 Z8 r, n" y% \% q  R' F$ R        close all
# }& _. L* h# u        x = -pi:.1:pi;
3 U3 }" R( _6 }( b. G: C( u7 v        y = sin(x);. G+ u6 w5 Z. w0 m7 u  ?
        plot(x,y)7 v2 h0 V% s, F+ E& W( ~' y6 }5 F
( Q2 V" ^$ J( o. q- t2 h  _
        当以上指令执行到plot时# l( j6 c6 F; U' H% a  H
        matlab会create一个figure3 D8 n# D' H1 L
        再createn附属于这个figure的axes! r- M5 Z( d7 g7 w$ K
        然后在这个axes上画图3 o. C( ]( I: d* g7 g6 c8 K' t

; W; l( ~$ f+ @9 O        close all
# K  F+ p3 g6 c1 I  i  a        x = -pi:.1:pi;5 q! F0 {6 n4 Y- z0 N
        y1 = sin(x);
4 Y3 l! W- S0 P$ A) u        y2 = cos(x);
! W& X4 Y$ l5 ^1 f' Z        subplot(2,1,1);plot(x,y1)! k8 s! D4 U/ d
        subplot(2,1,2);plot(x,y2)" k: H9 O: i. E7 Q; Z
+ c' W+ l, W, e( s3 x& L
        当以上指令执行到subplot时
0 u/ g/ `& Y+ Z% P& p' Q) D$ W        matlab会create一个figure; Z# l7 H) F# m0 t' ]) \
        及 "两个" 附属于这个figure的axes/ `* A! z2 r$ d' q7 k* f$ c  v' g
        plot会自动在第一个axes上画图
9 _2 h/ T, f8 ^9 q8 p+ L* @. E) ~" U# F* v) z
        第二个subplot会跳到第二个axes* I' p5 ?0 Y, M
        也就是去activate第二个axes+ h5 G3 P; N( F, n" ~: Z1 P
        接下来的plot就在这个axes上画图
2 F$ ?' k* [9 u! m  p; n! N6 h/ W- x! K! F& r
        请先保留这个图以便进一步解说* J3 \8 s, m, q, I2 `, @" k- [

/ _- |' A+ M2 P        好...所以你现在要做的事情是
' b: ?& k! ]/ U3 L        把你想要的axes放大到整个figure
2 l5 s' H& d1 w, F7 u# c/ L        并把其他axes删掉  w: f# W# R$ J( V$ _+ W0 N* ~
$ a4 Z9 t  U/ p5 Q% ~
        首先你要找到这个figure下一共有多少axes9 ^, T( ^4 H. c2 c+ \
        我们要用get指令" K$ ?: _9 G  D6 z! a3 ~7 \; M! X& H
        t=get(gcf,'children')
5 D2 m  z* E' a* L        get用来取出物件的property8 J2 u# Z5 S, |( S3 D& Z
        gcf就代表目前active的figure. T% O  I$ P5 L
        children就是figure的其中一种property
4 S' t1 u' o- M" e        在这里就代表所有归gcf管的axes
. A3 H! p3 o2 j- K0 y7 b) S- n+ ]$ t2 b
* o8 U* I6 _& ?! P5 c  x  }        你会发现t是个长度为二的vector
) N" Z9 J( y$ m5 u/ v6 j( z        因为我们已经用subplot创了两个axes$ e/ G. e4 ~" h! o+ N% L
        如果执行delete(t(1))
5 N  s8 c! I) i; i        那cos的就会被删去
8 i, p% p) j) i6 `4 j9 h+ V* j, g- E: I. r" n2 r
        接下来得把剩下的axes放大
+ U, F* i3 I: g7 y; X8 [) _        set(t(2),'position',[0 0 1 1])( o# p+ E1 H; D/ t, T1 o: M1 q
        set就是重新设定物件的property
" l; e- s, k/ Y        t(2)就是我们要设定的axes' ], O' V9 ^1 O7 I  {
        position是axes的其中一种property' j- y  S  v6 p& @
        [0 0 1 1]就是我们要设定的值3 C3 @6 n4 Q. g) t3 c% ?) Q8 k
        分别代表左底宽高! Z* p/ g* Y- d# f+ ~; U& P6 r3 j

% U, w1 [9 l$ ~- h0 Z9 b1 C        因为你希望放到最大% n9 z6 e1 z8 |. L9 w: E5 R/ Q6 A
        所以 "左边" 距离figure的框要是零. z" R+ Q! w" S# X
        而 "底边" 距离figure的框要是零+ k# u" G% c: _
        宽度及高度都要是 100%
# E7 K- }* Q% ~1 a$ ]8 s5 B: b/ C! c5 a# P! j. L# Y
        这篇讲的很简略
3 H7 \/ j$ w, s) i$ u        你应该把matlab help中的Graphics翻过一次
& G* A1 T2 q! |6 y1 [1 n. G# F        尤其是Handle graphic Objects
" K( A0 D# S% p( v3 p        来互相对照: r' u, ?; L9 L5 f  X# F
  • 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 06:53 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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