EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
function new_fig_handle = shift_axis_to_origin( fig_handle ) % 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)5 h# h* ]. U7 d" K* ~, o4 a$ h- Y) E
% 2008.10.10 in pku3 `6 ~5 ~' [4 r/ k
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' b C# E. b3 m( ?$ x7 U; W( r
figure('Name','shift_axis_to_origin','NumberTitle','off') % Create a new figure6 Q' O2 q& t/ G& S" @. @: F
% 拷贝图形到一个新的窗口. }. Q3 w6 ?1 \
new_fig_handle = copyobj( fig_handle , gcf ); xL=xlim ;
+ B1 ]4 t8 x- I. b- D: ZyL=ylim ; xt=get(gca,'xtick') ;
$ n2 g" l# p, Q Syt=get(gca,'ytick') ;
6 e# z( k$ C T0 x L$ H: k2 Vset(gca,'XTick',[],'XColor','w') ;" Z0 v& S6 R0 F5 ?( g
set(gca,'YTick',[],'YColor','w') ; % 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)& Q- B" v* S' v0 u! [2 t; _2 e# s
extend_x = ( xL(2)-xL(1) ) * 0.1 ;1 c& G9 N; Q& p7 ?6 v- @
extend_y = ( yL(2)-yL(1) ) * 0.1 ; f! K+ [: l/ ?3 w% r' b6 }
xxL = xL + [ -extend_x extend_x] ;
7 L$ X0 S1 |7 x; ~& AyyL = yL + [ -extend_y extend_y] ;& D# V% M/ w6 |- i- x
set(gca,'xlim', xxL) ;
! C: V" t/ ^' s# xset(gca,'ylim', yyL) ; pos = get(gca,'Position') ;
# u+ ~. ]( c# A7 B+ Hbox off; x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
I+ A7 Y0 L1 u) O( B$ c; [! F! b( D0 b$ Xy_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 ] ) ;6 N1 _# M& q! Q
xlim(xxL) ;& K1 N% z" Z3 @; t
box off ;
; V9 A- c) l5 Q# aset(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
. z( J' x' z5 `' wset(temp_1,'YColor','w') ; temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;
G9 I) k2 t' Q/ B( }+ |* fylim(yyL) ;
1 Y2 I6 b5 W5 Wbox off ;) M# x+ K/ J( p9 `) g# O
set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
$ Q7 b4 [! {2 y! O" F5 Hset(temp_2,'XColor','w') ; Base_pos = get(new_fig_handle,'Position') ;
4 t4 _2 Y7 r. p; ~3 Barrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;2 T: Z* _/ X; Q9 X- X1 w5 x
arrow_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');/ J% O( D: A6 ?
annotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');- ?8 ^6 B# F$ [6 d' D1 E1 Z
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 下面是一个例子: % 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)2 i4 Y; L# C2 z. l& N
% 2008.10.08
& n. ]1 S3 W5 U% clc;clear;close all;7 {0 @& L9 x1 e2 Y* S! p
t=linspace(-2,8,100);
# T% f6 S6 K/ V5 n4 ka1=axes;
4 N: v' k1 t% Jplot(t,cos(t)); % xt=get(gca,'xtick');/ g C! @; }/ C8 Z/ g
% set(gca,'XTick',[],'XColor','w');
* a: |; V' I- Y) |2 H3 U2 B% xL=xlim;
8 }& D* B1 A& u2 b1 J% p=get(gca,'Position');# u6 I9 ^- W+ B8 J0 ]( R$ x" a
% box off;3 D0 p) W2 ~! I2 [8 {5 Z4 [
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);& F; z! [ B# O5 p* r7 m
% xlim(xL);box off;
& \& u( w8 ?, P* v7 @+ s1 G4 G% set(gca,'XTick',xt,'Color','None','YTick',[]); new_fig_handle = shift_axis_to_origin( gca ) ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 此例子的实现效果如下两个图所示:
5 Y7 u0 k; M) v h5 S( P! \' ~! {+ n5 Q, r7 z3 b" B! ^6 A: W9 O
$ a$ M8 W* g: _/ W: f9 u# Q
4 r0 {% o- x* H$ S8 P$ P
. c2 f! A* ]9 U% v: T |