|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
有人想要利用 subplot 将三张图存在一个fig档,但是下次开启的时候, 又想要对其中一张图放大仔细看,那有没有什么方法可以从原来的 fig 档中抓出其中一张图?或者是将另外两张图删除呢?2 Q" i% F6 J# k* q
首先你要弄清楚matlab中figure 的架构
" g' c4 v3 ~5 [- i" A& d- W4 H5 g9 i
close all; p2 y$ R: e O
x = -pi:.1:pi;0 D x4 l, y/ {" o" g
y = sin(x);) |& z" ~% X: _( Y& C1 H9 Q
plot(x,y)
+ |0 c6 J) f0 B
2 U g) g% r. O W 当以上指令执行到plot时0 @% U; c: G& D
matlab会create一个figure; ]: S- R/ D+ I/ w$ l
再createn附属于这个figure的axes) f7 U4 P- d* u6 L& W* J- S. _
然后在这个axes上画图
- D6 |5 {" F* f0 ~% O# D2 e9 w% `3 R* ]. d
close all3 A- f% g3 U% }. J
x = -pi:.1:pi;: b/ k4 X1 u; v O
y1 = sin(x);
4 K* }/ \- s/ e! T9 A* S- [ y2 = cos(x);
) I2 I) n! \4 K! ]8 ^ subplot(2,1,1);plot(x,y1)2 _9 B2 ^6 m+ J4 r
subplot(2,1,2);plot(x,y2)9 ]1 E- V$ d/ ?6 ]) o/ {$ M
: d5 }' _' r6 @* L h% N
当以上指令执行到subplot时
' W1 _' ]6 s* B6 f1 ?/ a matlab会create一个figure/ ?, ~5 p6 W% K, P2 J
及 "两个" 附属于这个figure的axes
' W5 U+ N9 B7 L2 Q0 w. N6 k plot会自动在第一个axes上画图 L1 U0 x0 G- Z' e
, E/ }( R# F9 x; }/ k! K; P 第二个subplot会跳到第二个axes1 J( D: I$ q2 t6 _
也就是去activate第二个axes
. d) v& ^# y# ^, c& \8 f 接下来的plot就在这个axes上画图
! b& ~" L6 l/ i$ Q9 S2 R# E0 U
: Z9 }% U) Q# s 请先保留这个图以便进一步解说( a- W9 L1 @+ S& g
4 C* m4 K5 j- ~0 d
好...所以你现在要做的事情是& s. H# D* e. x( O
把你想要的axes放大到整个figure& Z2 C" N7 x% W$ _* i0 E1 u
并把其他axes删掉0 q/ o/ T1 y0 m5 g3 b
0 ]* {. V! w( v5 x
首先你要找到这个figure下一共有多少axes) X6 X8 n3 t- c# }) W
我们要用get指令
* g p$ e3 i! e, z8 g: J t=get(gcf,'children')
7 t- K5 W2 w; a" F get用来取出物件的property$ [( r5 G3 X9 \2 h8 x& X' W
gcf就代表目前active的figure5 s1 d3 _: |. s% l& p
children就是figure的其中一种property
% u6 T* N& Y/ Q$ T 在这里就代表所有归gcf管的axes
" C- S! J8 J, L. w2 \
* u4 A7 \- `( W; { 你会发现t是个长度为二的vector$ Z; d) j+ K6 c% x0 b0 F. G0 h2 ]$ Z
因为我们已经用subplot创了两个axes( A' k( c, N. \
如果执行delete(t(1)); o, c2 y, E0 o+ |8 G* q
那cos的就会被删去
6 u- K! X) T4 m+ a% R- J! N* Z. N* `. ^4 {7 ~; j4 ]1 @
接下来得把剩下的axes放大+ f. i0 h) [6 K. F2 k$ F
set(t(2),'position',[0 0 1 1])
& H( k8 d0 P m( ` set就是重新设定物件的property2 X! d @) n& X1 h' F
t(2)就是我们要设定的axes2 b5 K$ v% M: v
position是axes的其中一种property3 |9 [: m# [9 z0 K
[0 0 1 1]就是我们要设定的值: Q) `4 D& U( ]" m* }2 z" y$ Z% I& A
分别代表左底宽高' F6 m f1 E; O! o" g
$ M5 l: p5 B. H7 J, }4 w% f
因为你希望放到最大
8 m7 F/ s! W, `* J5 n 所以 "左边" 距离figure的框要是零
V8 R# y- W; E9 b 而 "底边" 距离figure的框要是零
0 _2 V, f! h) Q7 R3 W, a 宽度及高度都要是 100%
3 u" d% q% ?& G- T# L3 g
4 }1 f8 o: K. W) t$ K8 d' v9 J 这篇讲的很简略" [9 k$ |/ @1 P
你应该把matlab help中的Graphics翻过一次1 o2 A1 O& p+ F- _
尤其是Handle graphic Objects
A, G' C1 _3 W- @* e, \7 T# ] 来互相对照
: b7 J! }% [. J/ l: C |
|