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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
function new_fig_handle = shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)2 Z; x4 C9 B/ P' G7 C; f
% 2008.10.10 in pku
- \* M. g1 i. {( Q) U: g" c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
: d2 y2 E* W  N0 \figure('Name','shift_axis_to_origin','NumberTitle','off')                         % Create a new figure
. l: I5 Q0 c2 I1 p7 I( p% 拷贝图形到一个新的窗口
0 j  i! p% K( _7 ^. u- C8 l8 m1 \% qnew_fig_handle = copyobj( fig_handle , gcf );
xL=xlim ;. ?2 x: w. @- O' z  R/ b
yL=ylim ;
xt=get(gca,'xtick') ;
; w  v  Y& H, iyt=get(gca,'ytick') ;3 f$ A" H2 o! X% W2 E* [! D9 ?, g% s
set(gca,'XTick',[],'XColor','w') ;
" J8 j# U+ T. P* o- Yset(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)
' M" b" f- x- i6 s/ X  |! jextend_x = ( xL(2)-xL(1) ) * 0.1 ;' |' l3 `: E& T# l1 ]7 ~& i
extend_y = ( yL(2)-yL(1) ) * 0.1 ;
6 u: N- \$ d( `+ B/ o/ j. B0 K8 V  XxxL = xL + [ -extend_x extend_x] ;
5 D% N) [* M' myyL = yL + [ -extend_y extend_y] ;
4 Z* Y  e3 D  p7 B( Z1 Qset(gca,'xlim', xxL) ;
; Y7 `9 t: ^2 H$ D- bset(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;: x; k6 R6 U9 ^) H- X3 A
box off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
2 M7 G2 ~1 _" `6 a( g$ W: n9 ~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 ] ) ;
1 B. m5 L- ^' V& D+ Q3 W; ]xlim(xxL) ;9 |3 Z9 i0 j) Y8 ~9 Z, Q1 `3 {6 c
box off ;
- K% I7 J( S3 N$ T1 mset(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
$ m  s) x  a1 yset(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;
; s0 }0 n, t( ]7 X8 u/ X  \. x% C, uylim(yyL) ;9 o# @3 _6 _* D/ m0 K; P" [' |7 O4 }
box off ;
. k3 \8 f- l) ]# c+ J. r; f8 L( Oset(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
7 b- t6 c# r* J& W( u  vset(temp_2,'XColor','w') ;
Base_pos = get(new_fig_handle,'Position') ;
9 r- Y, e- F- P( O3 n- s- iarrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;
; \) j& Y6 b' z! c: T7 q5 Earrow_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');4 |' E  \: ]6 S- L9 x( [
annotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');
( x& h( ^1 d0 h; j( f2 cend
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面是一个例子:
% 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
, W6 \7 z) y+ ~2 }' P+ k% 2008.10.08- \9 b- K7 {, r: H
%
clc;clear;close all;3 z$ Q: @1 Q  m( c0 p: z
t=linspace(-2,8,100);
! }4 I; A9 R* d$ E/ Ha1=axes;
  z6 m2 R+ @& m% v1 I4 e& [! {plot(t,cos(t));
% xt=get(gca,'xtick');$ D  I: N& s2 J+ ~
% set(gca,'XTick',[],'XColor','w');1 @' {: F+ ]7 q' c4 z% S8 ~# I  y
% xL=xlim;! A8 e; ~% `7 N) H6 j
% p=get(gca,'Position');3 Z* ~/ a4 q* \$ W% P
% box off;* b( S1 t, ]- p# Q: P: {$ q
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);
( c. E* ~% ~$ A9 w7 G; u% xlim(xL);box off;. O$ k; z9 H$ X% h# f$ v
% set(gca,'XTick',xt,'Color','None','YTick',[]);
new_fig_handle = shift_axis_to_origin( gca ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
此例子的实现效果如下两个图所示:

8 \0 g- E! S. l# A/ I3 ]+ j- G% i9 F- G# e6 }

  N1 K0 \  _5 F" v1 h. d7 J& a
- d- V: O2 o7 H; B# B9 J( q
$ Z+ d# }2 l! e" D$ F

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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