EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
function new_fig_handle = shift_axis_to_origin( fig_handle ) % 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)/ x" B1 w. E9 c
% 2008.10.10 in pku
- P3 ?0 m7 y) y7 a%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N y2 N C/ M7 {3 T% i9 a
figure('Name','shift_axis_to_origin','NumberTitle','off') % Create a new figure/ N& {! Z/ }3 H) P5 P. R
% 拷贝图形到一个新的窗口
( s/ S& n! g7 _; D; _1 Q! N. wnew_fig_handle = copyobj( fig_handle , gcf ); xL=xlim ; a+ s, M! ^" [% S$ ~
yL=ylim ; xt=get(gca,'xtick') ;
+ x. X, b) i$ T- v5 j7 Nyt=get(gca,'ytick') ;
- o1 e9 K3 u5 C- Rset(gca,'XTick',[],'XColor','w') ;
[. [% r# g! H" ^# v/ nset(gca,'YTick',[],'YColor','w') ; % 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)' I- D' d0 S2 p" s, T5 Z
extend_x = ( xL(2)-xL(1) ) * 0.1 ;1 P+ w* y A1 e0 Z
extend_y = ( yL(2)-yL(1) ) * 0.1 ;
$ z, z0 R" b) J( _6 w3 l d/ B% MxxL = xL + [ -extend_x extend_x] ;
& n& c h7 F2 F' CyyL = yL + [ -extend_y extend_y] ;
# [2 R4 g; ]2 C* L7 _1 P4 }: ]4 ]set(gca,'xlim', xxL) ;
% _; K, k4 B- z$ f8 Yset(gca,'ylim', yyL) ; pos = get(gca,'Position') ;- t; s8 w" O2 T# }" ]3 J
box off; x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
. X/ {. S5 [6 `# Qy_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 ] ) ;. W& e) n. r/ k/ D7 M
xlim(xxL) ;6 y* N( H' W( D: @0 }2 z! T6 l
box off ;9 ]- _3 }+ ~5 T( m6 K1 |5 b i6 h5 u4 ~
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
8 P3 P: ?: G3 J/ X# O8 B5 n& }0 Dset(temp_1,'YColor','w') ; temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;0 \. ^- L9 j* x* }) n( [. V! I
ylim(yyL) ;9 i8 ?4 P; P! y# `; U
box off ;- \- p1 }$ l# m. x( U( U6 z9 ~
set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
3 k% w) v5 @& w( E# Iset(temp_2,'XColor','w') ; Base_pos = get(new_fig_handle,'Position') ;
3 ?& c* H0 w3 O4 _: Oarrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;# g) `7 O0 q. t( [
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');
4 |! w( }4 d( P* c1 I5 zannotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');4 ^, o0 ~6 U) |( s# o9 o
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 下面是一个例子: % 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)! c! r# U X6 I8 K5 g3 b2 t2 Y
% 2008.10.089 _/ v! J! Q4 N. l
% clc;clear;close all;' z% n& w$ G9 m
t=linspace(-2,8,100);: g% f" `! L0 n2 M3 `6 h
a1=axes;
6 c0 ^/ X: ` s8 f+ b( e, |plot(t,cos(t)); % xt=get(gca,'xtick');
, A X% ^* P6 y! y; u% set(gca,'XTick',[],'XColor','w');! b+ q' T# i: v/ {
% xL=xlim;2 O$ \: p/ N4 x: }% t. `
% p=get(gca,'Position');( j+ R* k4 Q9 i" ]
% box off;; @: K+ A# Y3 }" e4 y8 }3 V' a: O
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);
8 N, H! C A" T# `- z% xlim(xL);box off;. I0 {, [: k, W5 ~: B: f- ~- A
% set(gca,'XTick',xt,'Color','None','YTick',[]); new_fig_handle = shift_axis_to_origin( gca ) ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 此例子的实现效果如下两个图所示:
6 V: k( k. q) r+ T' J$ O6 e/ K
6 w# J! U& d9 s+ ]% x ! t# M/ L6 s* @/ I
4 L) y/ ^- W0 G+ N+ |2 }- n
9 z# s4 S% x$ ~) P' j& a |