找回密码
 注册
关于网站域名变更的通知
查看: 699|回复: 1
打印 上一主题 下一主题

如何在MATLAB中把坐标轴(X Y轴)移到坐标原点

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-8 10:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
function new_fig_handle = shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)# F9 L2 V" _2 m+ J
% 2008.10.10 in pku
2 d+ {) U/ r, d7 s% I7 r- e%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1 w: i0 L8 u! j) \! }figure('Name','shift_axis_to_origin','NumberTitle','off')                         % Create a new figure  A( h  d  J- ], Y+ W: D2 @
% 拷贝图形到一个新的窗口( e) p9 P( N* n9 O2 ?8 U3 L
new_fig_handle = copyobj( fig_handle , gcf );
xL=xlim ;2 P8 o. T9 f6 j4 D) M
yL=ylim ;
xt=get(gca,'xtick') ;- M1 W5 J+ f' @2 a9 a
yt=get(gca,'ytick') ;
4 f2 `2 ~/ g2 w) tset(gca,'XTick',[],'XColor','w') ;
9 M5 ?6 y# v( G8 D% mset(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)9 w' B  T! N- c  i
extend_x = ( xL(2)-xL(1) ) * 0.1 ;
/ S4 q+ L+ W; t* q- }  R+ |extend_y = ( yL(2)-yL(1) ) * 0.1 ;
5 E6 z: t4 N6 YxxL = xL + [ -extend_x extend_x] ;
- B1 {* a* O; f0 LyyL = yL + [ -extend_y extend_y] ;
$ [! v- p2 k  V3 E' l3 [0 n; Vset(gca,'xlim', xxL) ;( s+ \3 t6 i9 i& @9 G" \' k7 V; A7 V
set(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;
5 d0 m: i& V4 U, \! `box off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;: D) S) {! M# ^; a
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 ] ) ;4 O+ k: B, Q, ~3 S
xlim(xxL) ;
2 M- v$ [/ j6 O+ lbox off ;+ r' X- T5 W- v3 z, \7 g+ p5 m
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
9 U: T, z1 u! P9 Y5 s* D  {set(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;' e3 p' I2 S* v, b
ylim(yyL) ;* [, I8 d- A% p( J( h" ]8 F
box off ;
" ?, p, N! N  z0 }: g3 S+ [set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;/ F. f% ^, G% Q, v& @
set(temp_2,'XColor','w') ;
Base_pos = get(new_fig_handle,'Position') ;& {0 s- Q, Z' p) I4 a
arrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;& z" ^  i6 i# @* R9 Z
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');
6 v! x+ A3 c# ~9 Hannotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');% H0 r' I6 M1 t/ u
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面是一个例子:
% 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致); ^' |0 _2 u& o2 t3 D
% 2008.10.08) o( m" X6 t& h2 Y
%
clc;clear;close all;2 L  U% `6 h/ y7 |- `0 Y+ N3 @" q1 I
t=linspace(-2,8,100);
4 p7 r3 D4 ~  z4 y- N! `a1=axes;6 J9 b/ M. w2 f* t( q6 D$ ^% W
plot(t,cos(t));
% xt=get(gca,'xtick');
) q2 o" B4 d7 G5 n% ?6 o% set(gca,'XTick',[],'XColor','w');3 Z' e5 V; d4 C4 u6 d1 v. r
% xL=xlim;
8 E, v# _" D( d" n/ x4 R% p=get(gca,'Position');
2 k5 }* O/ V; b3 U. ^7 z1 s" Y% box off;- A. a; ~" c7 r$ P
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);: ]- M2 Q( q+ j' p: ?
% xlim(xL);box off;
7 ]% J  x5 @7 U  n% set(gca,'XTick',xt,'Color','None','YTick',[]);
new_fig_handle = shift_axis_to_origin( gca ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
此例子的实现效果如下两个图所示:
& z9 A( i. [2 O4 Y: C7 a  g, r+ F

1 m) ]  p; @/ w( C( X: D/ L

% k) {3 n* Y0 G9 Y7 j
8 a; P$ A9 k) P/ o7 ?
" }) n3 h, G$ L) {* [" Y

该用户从未签到

2#
发表于 2020-4-8 19:13 | 只看该作者
在MATLAB中把坐标轴(X Y轴)移到坐标原点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-22 04:25 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表