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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 06:51 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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