数学建模社区-数学中国
标题:
关于matlab画十字坐标
[打印本页]
作者:
mudan
时间:
2012-10-31 17:16
标题:
关于matlab画十字坐标
本帖最后由 mudan 于 2012-10-31 17:20 编辑
* t& {$ _$ Y' ?6 K7 V2 N
5 G4 W4 P3 e7 P7 C4 S
今天忽然想到如何用matlab画十字坐标,不过句柄方面确实用的不熟,便从网上找到一段程序,经测试可用,如果使用时不想有边框,可再加上axis off和box off两条语句,程序源出处是
http://www.ilovematlab.cn/viewth...p;extra=&page=9
function plot_to_center(x,y,Xticks,Yticks)
+ A9 R6 _+ m3 S* B
if nargin~=2 & nargin~=4 %输入不满足要求则报错
# ]# C. w7 m" A; V1 x( O! W/ ^
error('??? 输入参数个数不对');
0 ~7 c+ k7 X2 y# I' g
return;
' `8 b2 a8 c/ g( |8 W
end
2 H/ c, G0 t9 F4 ?, L: H- J" R2 F
figure;
, R4 G& B/ @+ f% u) Y! S
plot(x,y)
" n7 D. L+ ~. {, w# ~: F$ R
set(gca,'xticklabel',[])%不显示x标注
9 w! {- Q3 R& b' k! }- c
set(gca,'yticklabel',[])%不显示y标注
: I3 V1 s9 X0 E, ~$ o0 T2 h% a% @
c=get(gca,'color'); %获取axes背景色
8 q5 T; [2 s; t K/ E2 f
% set(gca,'xcolor',c,'ycolor',c) %设置标注杠颜色
" V7 C4 n# D2 j" D6 }
grid on %加上网格
" `" H8 B) l$ d; Q! a0 G
if nargin==4
, ?' s2 J) l3 [4 C# u4 K. x/ w
set(gca,'Xtick',Xticks); %设置Xtick
2 Q! v7 @" _! d \2 A# }
set(gca,'Ytick',Yticks); %设置Xtick
3 x) {3 t/ X x( l/ n* J9 I
xlim([Xticks(1),Xticks(end)]); %设置x范围
; H# D- M( S2 W; J* [ s% K
ylim([Yticks(1),Yticks(end)]); %设置y范围
& M$ c) ]# k. m" I: R' w) Y2 s
end
0 q% @$ v8 m) F
x=get(gca,'XTick'); %获取Xtick
$ P, b! P: Z4 f& ?* ], `/ p1 t
y=get(gca,'YTick'); %获取Ytick
; b& v- h+ s( e2 d7 T
xL=xlim; %获取X范围
( U/ T( ^# Y G2 ~; B/ j
yL=ylim; %获取Y范围
! {' z5 U/ `+ H! p: q* Z3 b6 T
xcenter=mean(xL); %X中心
; p% b( s( z! W
ycenter=mean(yL); %Y中心
m( k. t& ]; z- c
xrank=xL(2)-xL(1); %x跨度
4 n# g4 w2 t) Q3 Q2 N% O
yrank=yL(2)-yL(1); %y跨度
" w Y7 P* J9 U2 c) f) T
hold on;
& e0 t8 V" M# @7 K. b% b
plot(x,ycenter*ones(size(x)),'k',xcenter*ones(size(y)),y,'k') %画坐标轴
$ R1 X& H& o# t- s; V
ax=[max(x),max(x)-0.02*xrank,max(x)-0.02*xrank;...
; J7 S* p8 d, i; \% o1 J9 W6 k
ycenter,ycenter+0.01*yrank,ycenter-0.01*yrank];
$ Z! q) i% n+ u
fill(ax(1,:),ax(2,:),'k'); %画x箭头
: H. C3 Y) C8 n1 l# K
ay=[xcenter,xcenter+0.0065*xrank,xcenter-0.0065*xrank;...
! q! T8 c: r8 ]/ M, G: U
max(y),max(y)-0.03*yrank,max(y)-0.03*yrank];
/ b: B9 l" F0 I# H1 Q
fill(ay(1,:),ay(2,:),'k'); %画y箭头
0 O' Z! l8 L/ W7 b
Lx=length(x); %x的长度
( `0 I0 U3 Z6 [- u2 G3 }" Q
plot(repmat(x(1,2:end-1)',1,11)',repmat(ycenter:0.002*yrank:...
) o- Z4 L9 f0 N) o3 O
ycenter+0.02*yrank,Lx-2,1)','k') %画x标注杠
* B. P# Q6 j6 t/ v! `- a( P
Ly=length(y);
- \$ U5 `9 ?$ Y8 i6 c, g
plot(repmat(xcenter:0.002*xrank:xcenter+0.02*xrank,Ly-2,1)',...
: `8 U% M0 K8 [: v; k! y
repmat(y(1,2:end-1)',1,11)','k') %画y标注杠
* |5 J z. v }3 ~" w
for i=1:Lx
, V/ H& }. l9 |2 L) e$ ~0 |
text(x(i),(ycenter-0.03*yrank),num2str(x(i))); %x标注
, M2 L9 v1 k* b3 b& s- [% n
end
( w! w" v. S) v4 T P) q8 l
for i=1:Ly
+ ~8 c$ n M7 x+ ~0 m0 `" u
text(xcenter-0.05*xrank,y(i),num2str(y(i))); %y标注
: B) z0 y) U2 E& \! v1 @; n4 D
end
1 q* Z r2 c* T9 J" \8 X! T
hold off;
/ Z$ e0 x. ?0 _1 y! s9 P
复制代码
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5