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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
function new_fig_handle = shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
8 K& F6 N$ T" W  m0 v' V% 2008.10.10 in pku* x" p9 _1 {+ n* P( @6 j4 n5 T1 \+ s" [
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 G9 G# Z8 T: E! D9 T5 _figure('Name','shift_axis_to_origin','NumberTitle','off')                         % Create a new figure
) p! P& @% w5 P1 q" t: k4 y% 拷贝图形到一个新的窗口
- H* J% r1 {% E4 b8 \new_fig_handle = copyobj( fig_handle , gcf );
xL=xlim ;
/ H% h+ |# M  r1 U, J& l$ myL=ylim ;
xt=get(gca,'xtick') ;
# m0 T# C3 z6 a- |. W2 Wyt=get(gca,'ytick') ;
* w# j  u4 G  k! B+ R7 B+ pset(gca,'XTick',[],'XColor','w') ;
# C, f6 T& p) |! d% gset(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)
/ |0 m; t, X* j3 \% n3 Mextend_x = ( xL(2)-xL(1) ) * 0.1 ;
; g9 R3 l; R/ o1 u% o) V, Zextend_y = ( yL(2)-yL(1) ) * 0.1 ;* n# n* J0 Q7 K, M' w( {
xxL = xL + [ -extend_x extend_x] ;: p5 q) A1 [) E$ \. H! Q9 p4 O, J
yyL = yL + [ -extend_y extend_y] ;
; R- X- w5 L3 X* q& Sset(gca,'xlim', xxL) ;
" Q9 `% Z: k* v; |& Q" Hset(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;
3 i3 Q# d  Q8 n9 Y: i& X& Z0 X. Bbox off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
4 D, e% L* ]! `0 F9 Ly_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 ] ) ;
& l  F$ j; I3 S0 j# v2 z1 a9 U- uxlim(xxL) ;5 q0 M1 W* C# b# O+ t6 {# z+ [
box off ;* @/ D& ^2 t2 M4 `) V0 J
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
& \8 ^6 H7 x/ z. M  M* i0 N; eset(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;9 Y* r& b3 v1 l2 r! x2 b- J
ylim(yyL) ;5 H% d  o3 i: b
box off ;
- W) i; R8 f4 N: Wset(temp_2,'YTick',yt,'Color','None','XTick',[]) ;) Y3 K( g. O+ P7 o0 t& Q+ {6 O
set(temp_2,'XColor','w') ;
Base_pos = get(new_fig_handle,'Position') ;
& n( s: _( i" |, A. Q) r: warrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;7 X! q9 Y7 A' A* e3 ~& ?
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');
1 Y- b) C1 u1 g, g. y# Zannotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');1 `$ J( K6 g5 ?! X
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面是一个例子:
% 本程序目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)5 ^7 S7 P+ w( ?
% 2008.10.08
6 Y! q+ x$ e9 ^5 @# Y2 _- x' k- S%
clc;clear;close all;: t  H+ c+ ^& E( T7 }8 k, L, ~
t=linspace(-2,8,100);
1 \7 K+ A- f5 La1=axes;' W0 R$ K, X( `2 \9 p+ a& w# b1 W7 x
plot(t,cos(t));
% xt=get(gca,'xtick');
6 Q+ ^) h, w6 H+ r% set(gca,'XTick',[],'XColor','w');
# d) S* h  Q1 S$ |% xL=xlim;3 G6 |  ^7 o5 h+ t
% p=get(gca,'Position');
- l$ u& b$ H/ w  I' c, k4 `+ ]% box off;
' \: E' u, _7 i# ^( X+ P% a2=axes('Position',p+[0,p(4)/2,0,-p(4)/2]);/ |2 n$ g2 n, x
% xlim(xL);box off;
: z+ N$ A5 o, L+ L; ~% set(gca,'XTick',xt,'Color','None','YTick',[]);
new_fig_handle = shift_axis_to_origin( gca ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
此例子的实现效果如下两个图所示:

/ K/ _5 B! e- l
2 B' Z, S1 d/ g! }
6 P& l. s. Y: c. U
# I: }+ Q5 V. t; x+ j2 r
! m4 G  |$ [! o; r. L: O, S2 k

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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