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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
function new_fig_handle = shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
% ]. L( }! I  {% 2008.10.10 in pku
# x* S8 T* B+ E& _' @# e1 R4 W- ~! D%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% d/ N# I$ v3 w; ^
figure('Name','shift_axis_to_origin','NumberTitle','off')                         % Create a new figure9 w5 F- |2 M4 ^: |- P/ s
% 拷贝图形到一个新的窗口" r0 H7 ]5 ^0 c
new_fig_handle = copyobj( fig_handle , gcf );
xL=xlim ;) x+ @: {$ _1 g
yL=ylim ;
xt=get(gca,'xtick') ;! g6 \( `+ R* ~
yt=get(gca,'ytick') ;& p, s5 H! v0 I3 X
set(gca,'XTick',[],'XColor','w') ;: N$ z& E/ h: A
set(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)+ @! D  x' j( _0 C3 G9 f" }# d! N
extend_x = ( xL(2)-xL(1) ) * 0.1 ;
+ s2 _, {8 w& Wextend_y = ( yL(2)-yL(1) ) * 0.1 ;
! _8 s# u8 @! b. ?% DxxL = xL + [ -extend_x extend_x] ;1 u) Y+ @% b) K2 i
yyL = yL + [ -extend_y extend_y] ;
7 b6 \) k+ S/ P6 P- ^/ g0 j6 i; j; @set(gca,'xlim', xxL) ;
( u  w% o- q( I1 U, _" {set(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;
+ {$ [9 ^. y( Z  Z7 wbox off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;! \, S9 W( y  S3 a# v
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 ] ) ;3 V, K( ?' ]# _$ v1 n( Z
xlim(xxL) ;; n/ Y. @9 r" f/ e( n) C0 y
box off ;9 N( q+ [  q& }+ ^2 n: D
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;5 {8 V2 o6 S  R
set(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;# `7 r# U' o! r% {- {
ylim(yyL) ;
1 Q, O) n3 w/ X/ J+ |" n# cbox off ;# O- Z& [5 i5 e0 D* B4 `
set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
5 N6 ]" ^! P7 @! @* Q. {9 Mset(temp_2,'XColor','w') ;
Base_pos = get(new_fig_handle,'Position') ;
5 ]7 _4 S4 S" g0 G$ j$ jarrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;# W4 g$ G3 F& c5 @9 @! c
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');  r4 E1 j, o3 ^
annotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');! ~: T: d8 ?( J7 y: \% m4 O5 o! I* K
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面是一个例子:
% 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
2 z$ m: k' r8 V) t$ L% J$ [# e: `% 2008.10.08( Z3 }" L" m( k7 r
%
clc;clear;close all;
8 R7 u/ P! i* qt=linspace(-2,8,100);
! k. w# `* d# J% M' Y% H9 ?3 Ba1=axes;/ z+ P4 p) b9 I
plot(t,cos(t));
% xt=get(gca,'xtick');
. q6 s( G5 K1 {7 c0 X% set(gca,'XTick',[],'XColor','w');
- G' v9 r$ l" S! c: A% xL=xlim;
; r! ?1 c( e, _8 r4 p7 N) o2 Z5 O% p=get(gca,'Position');9 b$ s6 |1 U8 D; R8 }: l5 f
% box off;6 w7 M. D5 G: o& R7 D* D
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);8 {( |/ r/ h- B+ D7 \6 v9 `7 P5 b
% xlim(xL);box off;
2 [( ~$ Y4 j) K0 A( R' ^. o0 \, s% set(gca,'XTick',xt,'Color','None','YTick',[]);
new_fig_handle = shift_axis_to_origin( gca ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
此例子的实现效果如下两个图所示:
7 _- M3 A! {9 B# n2 k) Y1 E4 p

  x+ @5 p3 w; r; {+ h- v6 S9 A5 w" Q
' b; ?6 b& c& p; o' G, V8 S1 j" _5 r

) t2 i6 Q! C0 \- H5 e, M
; U" H  r2 o2 F( q8 G/ v

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 15:20 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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