EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
function new_fig_handle = shift_axis_to_origin( fig_handle ) % 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
8 K& F6 N$ T" W m0 v' V% 2008.10.10 in pku* x" p9 _1 {+ n* P( @6 j4 n5 T1 \+ s" [
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 G9 G# Z8 T: E! D9 T5 _figure('Name','shift_axis_to_origin','NumberTitle','off') % Create a new figure
) p! P& @% w5 P1 q" t: k4 y% 拷贝图形到一个新的窗口
- H* J% r1 {% E4 b8 \new_fig_handle = copyobj( fig_handle , gcf ); xL=xlim ;
/ H% h+ |# M r1 U, J& l$ myL=ylim ; xt=get(gca,'xtick') ;
# m0 T# C3 z6 a- |. W2 Wyt=get(gca,'ytick') ;
* w# j u4 G k! B+ R7 B+ pset(gca,'XTick',[],'XColor','w') ;
# C, f6 T& p) |! d% gset(gca,'YTick',[],'YColor','w') ; % 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)
/ |0 m; t, X* j3 \% n3 Mextend_x = ( xL(2)-xL(1) ) * 0.1 ;
; g9 R3 l; R/ o1 u% o) V, Zextend_y = ( yL(2)-yL(1) ) * 0.1 ;* n# n* J0 Q7 K, M' w( {
xxL = xL + [ -extend_x extend_x] ;: p5 q) A1 [) E$ \. H! Q9 p4 O, J
yyL = yL + [ -extend_y extend_y] ;
; R- X- w5 L3 X* q& Sset(gca,'xlim', xxL) ;
" Q9 `% Z: k* v; |& Q" Hset(gca,'ylim', yyL) ; pos = get(gca,'Position') ;
3 i3 Q# d Q8 n9 Y: i& X& Z0 X. Bbox off; x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
4 D, e% L* ]! `0 F9 Ly_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 ] ) ;
& l F$ j; I3 S0 j# v2 z1 a9 U- uxlim(xxL) ;5 q0 M1 W* C# b# O+ t6 {# z+ [
box off ;* @/ D& ^2 t2 M4 `) V0 J
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
& \8 ^6 H7 x/ z. M M* i0 N; eset(temp_1,'YColor','w') ; temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;9 Y* r& b3 v1 l2 r! x2 b- J
ylim(yyL) ;5 H% d o3 i: b
box off ;
- W) i; R8 f4 N: Wset(temp_2,'YTick',yt,'Color','None','XTick',[]) ;) Y3 K( g. O+ P7 o0 t& Q+ {6 O
set(temp_2,'XColor','w') ; Base_pos = get(new_fig_handle,'Position') ;
& n( s: _( i" |, A. Q) r: warrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;7 X! q9 Y7 A' A* e3 ~& ?
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');
1 Y- b) C1 u1 g, g. y# Zannotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');1 `$ J( K6 g5 ?! X
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 下面是一个例子: % 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)5 ^7 S7 P+ w( ?
% 2008.10.08
6 Y! q+ x$ e9 ^5 @# Y2 _- x' k- S% clc;clear;close all;: t H+ c+ ^& E( T7 }8 k, L, ~
t=linspace(-2,8,100);
1 \7 K+ A- f5 La1=axes;' W0 R$ K, X( `2 \9 p+ a& w# b1 W7 x
plot(t,cos(t)); % xt=get(gca,'xtick');
6 Q+ ^) h, w6 H+ r% set(gca,'XTick',[],'XColor','w');
# d) S* h Q1 S$ |% xL=xlim;3 G6 | ^7 o5 h+ t
% p=get(gca,'Position');
- l$ u& b$ H/ w I' c, k4 `+ ]% box off;
' \: E' u, _7 i# ^( X+ P% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);/ |2 n$ g2 n, x
% xlim(xL);box off;
: z+ N$ A5 o, L+ L; ~% set(gca,'XTick',xt,'Color','None','YTick',[]); new_fig_handle = shift_axis_to_origin( gca ) ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 此例子的实现效果如下两个图所示:
/ K/ _5 B! e- l
2 B' Z, S1 d/ g! } 6 P& l. s. Y: c. U
# I: }+ Q5 V. t; x+ j2 r
! m4 G |$ [! o; r. L: O, S2 k
|