数学建模社区-数学中国

标题: 关于matlab画十字坐标 [打印本页]

作者: mudan    时间: 2012-10-31 17:16
标题: 关于matlab画十字坐标
本帖最后由 mudan 于 2012-10-31 17:20 编辑 & N( A, O0 |* l( F( t/ v/ [

) |( ^  B7 s3 ]% ~. P+ R今天忽然想到如何用matlab画十字坐标,不过句柄方面确实用的不熟,便从网上找到一段程序,经测试可用,如果使用时不想有边框,可再加上axis off和box off两条语句,程序源出处是http://www.ilovematlab.cn/viewth...p;extra=&page=9
  1. function plot_to_center(x,y,Xticks,Yticks)/ l' S0 i) S" q  G& A
  2. if nargin~=2 & nargin~=4 %输入不满足要求则报错: r' C9 ]# F' u3 y6 _: Q- w
  3. error('??? 输入参数个数不对');1 r: y. G9 O) f
  4. return;4 K( G; N8 l4 T) _' U- A
  5. end
    3 c# v$ L  W/ Z6 u8 a- R
  6. figure;
    " _; s/ h2 I; W# _% [6 K
  7. plot(x,y)( T/ N7 J8 g* Y; c, z4 R
  8. set(gca,'xticklabel',[])%不显示x标注5 v4 w; g0 D  z
  9. set(gca,'yticklabel',[])%不显示y标注
    6 }, h/ u: o; T# n# \
  10. c=get(gca,'color'); %获取axes背景色
    1 r+ f& t, U% K% t" C
  11. % set(gca,'xcolor',c,'ycolor',c) %设置标注杠颜色/ i& V& u. ~; p$ n7 E+ `( O! i5 b
  12. grid on %加上网格# V! X. R1 x; R, Z6 g
  13. if nargin==4
    1 N! a: Y/ u1 y6 ~- I3 P
  14. set(gca,'Xtick',Xticks); %设置Xtick
    - z1 G% R5 W. e5 m" K  V
  15. set(gca,'Ytick',Yticks); %设置Xtick
    + H4 e! G, o" V1 u2 [" Y5 Y" v; y2 A
  16. xlim([Xticks(1),Xticks(end)]); %设置x范围
    % M" n- F7 ?& u9 I! ?4 V6 |$ e
  17. ylim([Yticks(1),Yticks(end)]); %设置y范围
    5 ~' X2 m* ?3 v+ Q
  18. end- S0 M- z4 |, z2 ]
  19. x=get(gca,'XTick'); %获取Xtick
    8 u  V2 T; ^1 ?# _+ I7 v
  20. y=get(gca,'YTick'); %获取Ytick
    1 n' Y, ^" Q0 u& r, H
  21. xL=xlim; %获取X范围" h) R# b: s, o% X- }" x
  22. yL=ylim; %获取Y范围& R$ G, y0 z, \& O
  23. xcenter=mean(xL); %X中心/ Z" H, g6 |# K! @9 A* c2 i1 i9 Q; A
  24. ycenter=mean(yL); %Y中心
    ) R! E! x8 m7 U' e# U" T
  25. xrank=xL(2)-xL(1); %x跨度
    ! e/ Y+ w8 p3 ]9 F' N" Y1 _. x
  26. yrank=yL(2)-yL(1); %y跨度# @3 F# c6 Z2 x6 y6 M( [
  27. hold on;
    % B* @6 G; p6 U1 J' D4 n
  28. plot(x,ycenter*ones(size(x)),'k',xcenter*ones(size(y)),y,'k') %画坐标轴" ]' f* [- \" E7 W3 r: O  c
  29. ax=[max(x),max(x)-0.02*xrank,max(x)-0.02*xrank;...
    # U$ }# ?" U7 J! @2 l
  30. ycenter,ycenter+0.01*yrank,ycenter-0.01*yrank]; 5 m6 e) H- e6 g/ R5 g* t: c  t
  31. fill(ax(1,:),ax(2,:),'k'); %画x箭头
    . e/ `# U4 F" E- U
  32. ay=[xcenter,xcenter+0.0065*xrank,xcenter-0.0065*xrank;...( X; p- p" h# X+ T
  33. max(y),max(y)-0.03*yrank,max(y)-0.03*yrank];! }" F- m: W7 b- o6 v0 ^) D
  34. fill(ay(1,:),ay(2,:),'k'); %画y箭头
    . y0 K# c6 @1 q
  35. Lx=length(x); %x的长度
    ' Z( Q5 P/ t8 P+ Y7 E- G+ ~
  36. plot(repmat(x(1,2:end-1)',1,11)',repmat(ycenter:0.002*yrank:...7 a' ?( t# G( E* I( {# g
  37. ycenter+0.02*yrank,Lx-2,1)','k') %画x标注杠
    * q0 n5 ]( ]5 D9 [. M/ l
  38. Ly=length(y);
    - \3 N8 ^( l9 Q, I8 r8 Z  m
  39. plot(repmat(xcenter:0.002*xrank:xcenter+0.02*xrank,Ly-2,1)',...8 E6 i" `! Q& y# @+ S) s* h3 N
  40. repmat(y(1,2:end-1)',1,11)','k') %画y标注杠
    & x. B$ M: R2 H. m
  41. for i=1:Lx
    8 R& I( l7 e' B' T
  42. text(x(i),(ycenter-0.03*yrank),num2str(x(i))); %x标注( e. D2 b5 ~; x
  43. end
    ; _( L* p' ]! [
  44. for i=1:Ly
    * x# R6 ]  i- W  v
  45. text(xcenter-0.05*xrank,y(i),num2str(y(i))); %y标注
    # ^3 c4 S; e: R# O, [1 H& U2 n
  46. end
    - @3 r$ i5 N+ m" _
  47. hold off;
    ) U$ w+ B+ k  J+ F
复制代码





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