EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
function new_fig_handle = shift_axis_to_origin( fig_handle ) % 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)2 Z; x4 C9 B/ P' G7 C; f
% 2008.10.10 in pku
- \* M. g1 i. {( Q) U: g" c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
: d2 y2 E* W N0 \figure('Name','shift_axis_to_origin','NumberTitle','off') % Create a new figure
. l: I5 Q0 c2 I1 p7 I( p% 拷贝图形到一个新的窗口
0 j i! p% K( _7 ^. u- C8 l8 m1 \% qnew_fig_handle = copyobj( fig_handle , gcf ); xL=xlim ;. ?2 x: w. @- O' z R/ b
yL=ylim ; xt=get(gca,'xtick') ;
; w v Y& H, iyt=get(gca,'ytick') ;3 f$ A" H2 o! X% W2 E* [! D9 ?, g% s
set(gca,'XTick',[],'XColor','w') ;
" J8 j# U+ T. P* o- Yset(gca,'YTick',[],'YColor','w') ; % 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)
' M" b" f- x- i6 s/ X |! jextend_x = ( xL(2)-xL(1) ) * 0.1 ;' |' l3 `: E& T# l1 ]7 ~& i
extend_y = ( yL(2)-yL(1) ) * 0.1 ;
6 u: N- \$ d( `+ B/ o/ j. B0 K8 V XxxL = xL + [ -extend_x extend_x] ;
5 D% N) [* M' myyL = yL + [ -extend_y extend_y] ;
4 Z* Y e3 D p7 B( Z1 Qset(gca,'xlim', xxL) ;
; Y7 `9 t: ^2 H$ D- bset(gca,'ylim', yyL) ; pos = get(gca,'Position') ;: x; k6 R6 U9 ^) H- X3 A
box off; x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
2 M7 G2 ~1 _" `6 a( g$ W: n9 ~y_shift = abs( xxL(1)/(xxL(2)-xxL(1)) ) ; temp_1 = axes( 'Position', pos + [ 0 , pos(4) * x_shift , 0 , - pos(4)* x_shift*0.99999 ] ) ;
1 B. m5 L- ^' V& D+ Q3 W; ]xlim(xxL) ;9 |3 Z9 i0 j) Y8 ~9 Z, Q1 `3 {6 c
box off ;
- K% I7 J( S3 N$ T1 mset(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
$ m s) x a1 yset(temp_1,'YColor','w') ; temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;
; s0 }0 n, t( ]7 X8 u/ X \. x% C, uylim(yyL) ;9 o# @3 _6 _* D/ m0 K; P" [' |7 O4 }
box off ;
. k3 \8 f- l) ]# c+ J. r; f8 L( Oset(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
7 b- t6 c# r* J& W( u vset(temp_2,'XColor','w') ; Base_pos = get(new_fig_handle,'Position') ;
9 r- Y, e- F- P( O3 n- s- iarrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;
; \) j& Y6 b' z! c: T7 q5 Earrow_pos_in_y_dircetion = Base_pos(1) - Base_pos(3) * xxL(1)/(xxL(2)-xxL(1)) ; annotation('arrow',[Base_pos(1) , Base_pos(1)+Base_pos(3)] , [arrow_pos_in_x_dircetion , arrow_pos_in_x_dircetion ] , 'Color','k');4 |' E \: ]6 S- L9 x( [
annotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');
( x& h( ^1 d0 h; j( f2 cend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 下面是一个例子: % 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
, W6 \7 z) y+ ~2 }' P+ k% 2008.10.08- \9 b- K7 {, r: H
% clc;clear;close all;3 z$ Q: @1 Q m( c0 p: z
t=linspace(-2,8,100);
! }4 I; A9 R* d$ E/ Ha1=axes;
z6 m2 R+ @& m% v1 I4 e& [! {plot(t,cos(t)); % xt=get(gca,'xtick');$ D I: N& s2 J+ ~
% set(gca,'XTick',[],'XColor','w');1 @' {: F+ ]7 q' c4 z% S8 ~# I y
% xL=xlim;! A8 e; ~% `7 N) H6 j
% p=get(gca,'Position');3 Z* ~/ a4 q* \$ W% P
% box off;* b( S1 t, ]- p# Q: P: {$ q
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);
( c. E* ~% ~$ A9 w7 G; u% xlim(xL);box off;. O$ k; z9 H$ X% h# f$ v
% set(gca,'XTick',xt,'Color','None','YTick',[]); new_fig_handle = shift_axis_to_origin( gca ) ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 此例子的实现效果如下两个图所示:
8 \0 g- E! S. l# A/ I3 ]+ j- G% i9 F- G# e6 }
N1 K0 \ _5 F" v1 h. d7 J& a
- d- V: O2 o7 H; B# B9 J( q
$ Z+ d# }2 l! e" D$ F |