EDA365电子论坛网
标题: 如何在MATLAB中把坐标轴(X Y轴)移到坐标原点 [打印本页]
作者: pulbieup 时间: 2020-4-8 10:02
标题: 如何在MATLAB中把坐标轴(X Y轴)移到坐标原点
function new_fig_handle = shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)8 a$ {+ e& P+ W! M# \
% 2008.10.10 in pku v0 {& ?( O2 l( q& ~2 w3 N
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* @# A, d: i, A' j# v6 I
figure('Name','shift_axis_to_origin','NumberTitle','off') % Create a new figure% r1 C3 x9 r" x) ?! ]
% 拷贝图形到一个新的窗口
; o" J T, d' [- b" j3 ]new_fig_handle = copyobj( fig_handle , gcf );
xL=xlim ;
; K. c1 ^8 q) t( T7 Y# F* gyL=ylim ;
xt=get(gca,'xtick') ;# e/ j6 M/ J7 r0 s4 D+ }5 l
yt=get(gca,'ytick') ;
' ^, H* ~7 K6 I2 Q& @7 ^4 cset(gca,'XTick',[],'XColor','w') ;
8 x, y& s( q* v8 Iset(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)
0 J0 ^# g+ E" W0 w Y& cextend_x = ( xL(2)-xL(1) ) * 0.1 ;# i9 }# m% M( C+ L/ y4 r% O
extend_y = ( yL(2)-yL(1) ) * 0.1 ;
3 [! U6 {4 n9 |1 u% d- SxxL = xL + [ -extend_x extend_x] ;
6 i5 S% U- Y/ d$ k( J2 `yyL = yL + [ -extend_y extend_y] ;# L% H" T6 z+ d
set(gca,'xlim', xxL) ;/ {2 x! p4 a' q d
set(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;+ K' L9 b0 e! C; D' V- n5 W( Y# P
box off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
; R: i. j! S+ \" 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 ] ) ;5 q) @( |6 z! P" z! X
xlim(xxL) ;! d- Q- q1 d& O9 K: E1 D" F
box off ;
6 T5 ]8 ?9 |. o' R! | Wset(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
9 q$ e# [1 v! c0 E9 z+ Aset(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;: _, V/ ?8 p% W
ylim(yyL) ;0 s0 \1 w' L5 Y6 G/ t
box off ;' z& |8 f$ F6 ^) J4 ~
set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
- u0 L7 r+ t# [% w* t/ Sset(temp_2,'XColor','w') ;
Base_pos = get(new_fig_handle,'Position') ;
2 X/ t% P. D& o5 O" y# B/ uarrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;; i: d9 j7 ~, q
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');
; r! ^2 K+ t4 }1 n4 Zannotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');
. \" q4 ~! ^* k }- _end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面是一个例子:
% 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
$ V* x3 d! f( |2 E! y- `* C1 B% 2008.10.08
2 {0 @( `" A' B5 Y8 o- W%
clc;clear;close all;
* G. V1 a# t2 w3 b$ qt=linspace(-2,8,100);
5 ?! j7 Z5 j9 _4 @a1=axes;
% }4 T5 v- f7 z; M/ jplot(t,cos(t));
% xt=get(gca,'xtick');
9 w& e; L8 s: |5 O1 X9 _% set(gca,'XTick',[],'XColor','w');2 ?) ?1 }/ l1 j7 a. V
% xL=xlim;
/ e. F0 l4 E; s Q: s% p=get(gca,'Position');
( V7 \, K; V. i/ M" C( f& ^8 L; I, n% box off;6 a. n' X# Q6 v$ M, i5 H5 }, Z9 j
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);
- o% U' J' y- h! f1 E- @% xlim(xL);box off;: z% u( V5 [9 W- U
% set(gca,'XTick',xt,'Color','None','YTick',[]);
new_fig_handle = shift_axis_to_origin( gca ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
此例子的实现效果如下两个图所示:
6 c4 e4 P ^. j a" `9 C/ u# a" w" f- k" N7 T
! k! J i g) Q: n/ M& o
; U- T6 t& H: s% O: |) s* \, R T, J& ]3 v9 J0 h* a
作者: NNNei256 时间: 2020-4-8 19:13
在MATLAB中把坐标轴(X Y轴)移到坐标原点
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |