数学建模社区-数学中国

标题: 关于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
  1. function plot_to_center(x,y,Xticks,Yticks)+ A9 R6 _+ m3 S* B
  2. if nargin~=2 & nargin~=4 %输入不满足要求则报错
    # ]# C. w7 m" A; V1 x( O! W/ ^
  3. error('??? 输入参数个数不对');
    0 ~7 c+ k7 X2 y# I' g
  4. return;
    ' `8 b2 a8 c/ g( |8 W
  5. end
    2 H/ c, G0 t9 F4 ?, L: H- J" R2 F
  6. figure;, R4 G& B/ @+ f% u) Y! S
  7. plot(x,y)" n7 D. L+ ~. {, w# ~: F$ R
  8. set(gca,'xticklabel',[])%不显示x标注
    9 w! {- Q3 R& b' k! }- c
  9. set(gca,'yticklabel',[])%不显示y标注: I3 V1 s9 X0 E, ~$ o0 T2 h% a% @
  10. c=get(gca,'color'); %获取axes背景色8 q5 T; [2 s; t  K/ E2 f
  11. % set(gca,'xcolor',c,'ycolor',c) %设置标注杠颜色" V7 C4 n# D2 j" D6 }
  12. grid on %加上网格
    " `" H8 B) l$ d; Q! a0 G
  13. if nargin==4
    , ?' s2 J) l3 [4 C# u4 K. x/ w
  14. set(gca,'Xtick',Xticks); %设置Xtick2 Q! v7 @" _! d  \2 A# }
  15. set(gca,'Ytick',Yticks); %设置Xtick3 x) {3 t/ X  x( l/ n* J9 I
  16. xlim([Xticks(1),Xticks(end)]); %设置x范围; H# D- M( S2 W; J* [  s% K
  17. ylim([Yticks(1),Yticks(end)]); %设置y范围
    & M$ c) ]# k. m" I: R' w) Y2 s
  18. end0 q% @$ v8 m) F
  19. x=get(gca,'XTick'); %获取Xtick$ P, b! P: Z4 f& ?* ], `/ p1 t
  20. y=get(gca,'YTick'); %获取Ytick; b& v- h+ s( e2 d7 T
  21. xL=xlim; %获取X范围
    ( U/ T( ^# Y  G2 ~; B/ j
  22. yL=ylim; %获取Y范围! {' z5 U/ `+ H! p: q* Z3 b6 T
  23. xcenter=mean(xL); %X中心
    ; p% b( s( z! W
  24. ycenter=mean(yL); %Y中心
      m( k. t& ]; z- c
  25. xrank=xL(2)-xL(1); %x跨度
    4 n# g4 w2 t) Q3 Q2 N% O
  26. yrank=yL(2)-yL(1); %y跨度" w  Y7 P* J9 U2 c) f) T
  27. hold on;& e0 t8 V" M# @7 K. b% b
  28. plot(x,ycenter*ones(size(x)),'k',xcenter*ones(size(y)),y,'k') %画坐标轴$ R1 X& H& o# t- s; V
  29. ax=[max(x),max(x)-0.02*xrank,max(x)-0.02*xrank;...
    ; J7 S* p8 d, i; \% o1 J9 W6 k
  30. ycenter,ycenter+0.01*yrank,ycenter-0.01*yrank]; $ Z! q) i% n+ u
  31. fill(ax(1,:),ax(2,:),'k'); %画x箭头
    : H. C3 Y) C8 n1 l# K
  32. ay=[xcenter,xcenter+0.0065*xrank,xcenter-0.0065*xrank;...! q! T8 c: r8 ]/ M, G: U
  33. max(y),max(y)-0.03*yrank,max(y)-0.03*yrank];
    / b: B9 l" F0 I# H1 Q
  34. fill(ay(1,:),ay(2,:),'k'); %画y箭头
    0 O' Z! l8 L/ W7 b
  35. Lx=length(x); %x的长度( `0 I0 U3 Z6 [- u2 G3 }" Q
  36. plot(repmat(x(1,2:end-1)',1,11)',repmat(ycenter:0.002*yrank:...) o- Z4 L9 f0 N) o3 O
  37. ycenter+0.02*yrank,Lx-2,1)','k') %画x标注杠* B. P# Q6 j6 t/ v! `- a( P
  38. Ly=length(y);
    - \$ U5 `9 ?$ Y8 i6 c, g
  39. plot(repmat(xcenter:0.002*xrank:xcenter+0.02*xrank,Ly-2,1)',...: `8 U% M0 K8 [: v; k! y
  40. repmat(y(1,2:end-1)',1,11)','k') %画y标注杠
    * |5 J  z. v  }3 ~" w
  41. for i=1:Lx
    , V/ H& }. l9 |2 L) e$ ~0 |
  42. text(x(i),(ycenter-0.03*yrank),num2str(x(i))); %x标注, M2 L9 v1 k* b3 b& s- [% n
  43. end
    ( w! w" v. S) v4 T  P) q8 l
  44. for i=1:Ly
    + ~8 c$ n  M7 x+ ~0 m0 `" u
  45. text(xcenter-0.05*xrank,y(i),num2str(y(i))); %y标注: B) z0 y) U2 E& \! v1 @; n4 D
  46. end
    1 q* Z  r2 c* T9 J" \8 X! T
  47. hold off;/ Z$ e0 x. ?0 _1 y! s9 P
复制代码





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5