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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
function new_fig_handle = shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)/ x" B1 w. E9 c
% 2008.10.10 in pku
- P3 ?0 m7 y) y7 a%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  N  y2 N  C/ M7 {3 T% i9 a
figure('Name','shift_axis_to_origin','NumberTitle','off')                         % Create a new figure/ N& {! Z/ }3 H) P5 P. R
% 拷贝图形到一个新的窗口
( s/ S& n! g7 _; D; _1 Q! N. wnew_fig_handle = copyobj( fig_handle , gcf );
xL=xlim ;  a+ s, M! ^" [% S$ ~
yL=ylim ;
xt=get(gca,'xtick') ;
+ x. X, b) i$ T- v5 j7 Nyt=get(gca,'ytick') ;
- o1 e9 K3 u5 C- Rset(gca,'XTick',[],'XColor','w') ;
  [. [% r# g! H" ^# v/ nset(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)' I- D' d0 S2 p" s, T5 Z
extend_x = ( xL(2)-xL(1) ) * 0.1 ;1 P+ w* y  A1 e0 Z
extend_y = ( yL(2)-yL(1) ) * 0.1 ;
$ z, z0 R" b) J( _6 w3 l  d/ B% MxxL = xL + [ -extend_x extend_x] ;
& n& c  h7 F2 F' CyyL = yL + [ -extend_y extend_y] ;
# [2 R4 g; ]2 C* L7 _1 P4 }: ]4 ]set(gca,'xlim', xxL) ;
% _; K, k4 B- z$ f8 Yset(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;- t; s8 w" O2 T# }" ]3 J
box off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
. X/ {. S5 [6 `# Qy_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 ] ) ;. W& e) n. r/ k/ D7 M
xlim(xxL) ;6 y* N( H' W( D: @0 }2 z! T6 l
box off ;9 ]- _3 }+ ~5 T( m6 K1 |5 b  i6 h5 u4 ~
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
8 P3 P: ?: G3 J/ X# O8 B5 n& }0 Dset(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;0 \. ^- L9 j* x* }) n( [. V! I
ylim(yyL) ;9 i8 ?4 P; P! y# `; U
box off ;- \- p1 }$ l# m. x( U( U6 z9 ~
set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
3 k% w) v5 @& w( E# Iset(temp_2,'XColor','w') ;
Base_pos = get(new_fig_handle,'Position') ;
3 ?& c* H0 w3 O4 _: Oarrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;# g) `7 O0 q. t( [
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');
4 |! w( }4 d( P* c1 I5 zannotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');4 ^, o0 ~6 U) |( s# o9 o
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面是一个例子:
% 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)! c! r# U  X6 I8 K5 g3 b2 t2 Y
% 2008.10.089 _/ v! J! Q4 N. l
%
clc;clear;close all;' z% n& w$ G9 m
t=linspace(-2,8,100);: g% f" `! L0 n2 M3 `6 h
a1=axes;
6 c0 ^/ X: `  s8 f+ b( e, |plot(t,cos(t));
% xt=get(gca,'xtick');
, A  X% ^* P6 y! y; u% set(gca,'XTick',[],'XColor','w');! b+ q' T# i: v/ {
% xL=xlim;2 O$ \: p/ N4 x: }% t. `
% p=get(gca,'Position');( j+ R* k4 Q9 i" ]
% box off;; @: K+ A# Y3 }" e4 y8 }3 V' a: O
% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);
8 N, H! C  A" T# `- z% xlim(xL);box off;. I0 {, [: k, W5 ~: B: f- ~- A
% set(gca,'XTick',xt,'Color','None','YTick',[]);
new_fig_handle = shift_axis_to_origin( gca ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
此例子的实现效果如下两个图所示:

6 V: k( k. q) r+ T' J$ O6 e/ K
6 w# J! U& d9 s+ ]% x
! t# M/ L6 s* @/ I
4 L) y/ ^- W0 G+ N+ |2 }- n

9 z# s4 S% x$ ~) P' j& a

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 10:12 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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