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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
        有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?! S) D( c: e+ D& \) {2 f
        首先你要弄清楚matlab中figure 的架构
7 s+ |, z0 Q) c/ f9 }5 K3 a, S( x% \/ S7 J( w' v6 g. I  P
        close all
) F9 d7 ^# |: e, b0 v        x = -pi:.1:pi;1 S0 v8 t" A& B+ ?* v
        y = sin(x);
( M. ^, }& o: G7 _. J# D  R& ~1 b( E$ m        plot(x,y)2 G; M- T4 b$ c

& `* l8 I" S# |( E( J3 z* A        当以上指令执行到plot时# Y+ y: p8 F5 f6 m  `( |, R
        matlab会create一个figure, W; U6 U- ?4 \% ]) g$ |% q. h/ U
        再createn附属于这个figure的axes  m4 I+ |* m. _& O
        然后在这个axes上画图# {. {) E( S% E$ L3 E+ k

4 v% b  S5 P  m        close all
4 ^, P4 O5 s+ n& j6 N6 x$ J( K        x = -pi:.1:pi;8 t$ V' T$ Y" `6 U* d
        y1 = sin(x);1 v$ d) }6 T# h
        y2 = cos(x);
9 k' e3 A8 ^; S        subplot(2,1,1);plot(x,y1)
1 ]5 a1 _: F; i: D) V        subplot(2,1,2);plot(x,y2)9 ~, C5 ~3 T; U' F6 R
4 ~' ?1 D# `6 o' [
        当以上指令执行到subplot时0 ^) A* W; o- k0 B0 [, ?
        matlab会create一个figure8 {( e# u0 q5 m; ^$ b4 U) D+ L
        及 "两个" 附属于这个figure的axes! @/ m7 T6 t9 ^7 Z, x
        plot会自动在第一个axes上画图
! V; S8 N! b% k" ?- {/ h) Q
8 _) E( ?5 }" }) F3 e        第二个subplot会跳到第二个axes' @. T7 A" t/ ]
        也就是去activate第二个axes
5 B3 N" _$ h" }3 P! z! x5 |6 Y! {) W        接下来的plot就在这个axes上画图
" v7 s$ O# Y! U1 s, [( J2 |8 ~4 K/ a& n3 f2 j  A( L
        请先保留这个图以便进一步解说
# `' |1 x/ G. i/ `9 h8 p
$ j7 T7 f) W( M: C5 T        好...所以你现在要做的事情是
- [& T6 L9 U* r. y        把你想要的axes放大到整个figure
2 i2 G- Z6 i9 X- r  S        并把其他axes删掉; g! S: F; z, R8 }( e$ x9 d2 I  n
6 x: h" a9 r- n- [& |" e
        首先你要找到这个figure下一共有多少axes
9 x8 {! r2 N! S$ N" G        我们要用get指令, E5 E# O1 O/ m- e: `
        t=get(gcf,'children')6 I' @( }- {! _1 b5 u0 \. T
        get用来取出物件的property$ g. L6 T5 r4 {9 Y% O: F. q: c' {
        gcf就代表目前active的figure
  g, i4 v; I. W& T' L! {2 }" F        children就是figure的其中一种property. h, i# d% F0 T: x  f
        在这里就代表所有归gcf管的axes
5 W; G, R9 j2 |" N9 [3 m
7 Z5 L6 E  `" X* H# F5 e, T" x  B        你会发现t是个长度为二的vector' b: D  d1 z" `0 j/ b4 K8 H% u
        因为我们已经用subplot创了两个axes
" S0 K5 e- a" |# z5 Z2 F5 v        如果执行delete(t(1))' Z2 v4 }, [4 l# [
        那cos的就会被删去2 f, ]0 j# |! X) U" G/ L8 t

' I9 X- `: N5 T8 S8 A        接下来得把剩下的axes放大
" {5 W7 I9 Y( z9 U8 {2 m- }        set(t(2),'position',[0 0 1 1])( q8 u! i9 \4 Y( |2 y& ?" e( o
        set就是重新设定物件的property
4 N' M+ A' A( B" W4 z* C) d7 Z! ?        t(2)就是我们要设定的axes3 X9 B: {$ v; j) W: w& U3 H2 v% V3 E
        position是axes的其中一种property1 q8 k1 ^3 K& [
        [0 0 1 1]就是我们要设定的值
9 z+ B& n2 x  w) A' {/ C. b2 ^9 |        分别代表左底宽高
4 V# ~" D; G" Q
2 q# v  r8 M5 E8 j0 R7 C        因为你希望放到最大
" ?6 u( ~" m. D/ Q- o3 ]        所以 "左边" 距离figure的框要是零
- C, m0 x* N) n/ N& G+ i6 @7 I        而 "底边" 距离figure的框要是零
5 L3 ]4 W& J. {8 @3 i  d! e        宽度及高度都要是 100%
+ f0 G% f( s  a
1 V7 B+ J9 P: M& ~7 t; ?  t- M        这篇讲的很简略
4 S# E$ L/ `5 K1 O; C5 H3 N        你应该把matlab help中的Graphics翻过一次/ l' F" k; d- S# u- i
        尤其是Handle graphic Objects
' J$ u1 r; ^; ^        来互相对照7 U! \! b3 g1 ^9 o9 t
  • 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-8-23 08:12 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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