楼主: pinggu2688
4116 17

[实际应用] 绘图中轴刻度的定义 [推广有奖]

  • 2关注
  • 0粉丝

博士生

6%

还不是VIP/贵宾

-

威望
0
论坛币
40 个
通用积分
40.2335
学术水平
1 点
热心指数
3 点
信用等级
1 点
经验
3113 点
帖子
166
精华
0
在线时间
103 小时
注册时间
2009-11-12
最后登录
2024-8-28

楼主
pinggu2688 发表于 2011-7-27 06:48:49 |AI写论文
30论坛币
画proc gplot散点图中遇到难题,用axis定义轴以及刻度,
轴上刻度范围是0到13,想把刻度显示成为0,4,8,12,13,在0到12可以用order(0 to 12 by 4)但是如果把13加上(0 to 12 by 4 13),13虽然能显示在轴上但是
12到13之间的距离是4个单位的长度而不是一个单位的长度,请问如何解决此问题?多谢.,下附SAS代码:
goptions reset=all;
axis1 minor=(number=1) label=none order=(0 to 12 by 4,13) ;
data one;
input y x;
cards;
2 0
3 7
4 9
2 13
6 8
5 2
;
run;
proc gplot data=one;
plot y*x/haxis=axis1;
run;quit;

最佳答案

tj0412ymy 查看完整内容

用Annotate可以解决这个问题!!!
关键词:goptions options Number Option gplot 定义 绘图 刻度 中轴

本帖被以下文库推荐

沙发
tj0412ymy 发表于 2011-7-27 06:48:50
pinggu2688 发表于 2011-7-28 02:52
关键是不需要显示刻度值的刻线如何去掉,比如刻线在1,2,3的时候不需要显示,如何去掉刻线,或者刻线高度如何把不需要显示的刻线(其他)高度设置为0,需要显示的刻线(0,4,8,12,13)高度设置为1?
用Annotate可以解决这个问题!!!

  1. options symbolgen;
  2. %let n=13;
  3. %let n1=%eval(&n.-1);
  4. %let m=4;
  5. data one;
  6. input y x;
  7. cards;
  8. 2 0
  9. 3 7
  10. 4 9
  11. 2 13
  12. 6 8
  13. 5 2
  14. ;
  15. run;

  16. %macro test();
  17. data tick;
  18. do i=1 to &n;
  19. mode=mod(i,&m.);
  20. if mode=0 then tick=put(i,2.);
  21. else tick=' ';
  22. output;
  23. end;
  24. run;
  25. proc sql noprint;
  26. select  tick INTO : tick1 -:tick&n1
  27. from tick
  28. ;
  29. quit;
  30. DATA plotanno;
  31. set one end=eof;
  32.        Length FUNCTION COLOR STYLE font $8 TEXT $100  ;
  33.        RETAIN COLOR 'BLACK' WHEN 'A' LINE 1 ;
  34. %do k=1 %to &n1;
  35.      %IF "&&tick&k."  NE NONE %THEN  %DO;
  36.     YSYS='1'; XSYS='2'; HSYS='5'; font='Arial';
  37.     line=1; size=0.1; color='BLACK';
  38.     function='move'; y=0; x=INPUT("&&tick&k.",2.); Output;YSYS='9';
  39. function='draw';  y=-1; Output;
  40.     %END;  %END;
  41. if eof then do;
  42.     YSYS='1'; XSYS='2'; HSYS='5'; font='Arial';
  43.      line=1; size=0.1; color='BLACK';
  44.     function='move'; y=0; x=0; Output;YSYS='9';
  45. function='draw';  y=-1; Output;
  46.     function='move'; y=1; x=13; Output;YSYS='9';
  47. function='draw';  y=-1; Output;
  48. end;
  49. RUN;
  50. axis1 minor=(number=1) label=none major=NONE  minor=none value=('0' %do j=1 %to &n1; "&&tick&j." %end; "&n") ;
  51. proc gplot data=one anno=plotanno;
  52. plot y*x/haxis=axis1;
  53. run;quit;
  54. %mend;
  55. %test();
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pinggu2688 + 1 + 1 + 1 you are ****in awesome

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
honghejing 发表于 2011-7-27 09:54:11
这个好像sas改不了,你可以参考Graph reference

板凳
honghejing 发表于 2011-7-27 09:56:37
如果你硬要给改成这样,可以修改一下每个刻度的label,将不是这些数值的设为missing,order=(0 to 13 by 1)

报纸
yugao1986 发表于 2011-7-27 09:57:31
利用proc format修改
三人行必有我师

地板
yugao1986 发表于 2011-7-27 10:30:56
这样是否合lz意
  1. goptions reset=all;
  2. proc format;
  3. value vfmt 0,4,8,12,13 =[2.] other='';
  4. run;
  5. axis1 minor=(number=1) label=none order=( 0 to 13 by 1 );
  6. data one;
  7. input y x;
  8. cards;
  9. 2 0
  10. 3 7
  11. 4 9
  12. 2 13
  13. 6 8
  14. 5 2
  15. ;
  16. run;
  17. proc gplot data=one;
  18. plot y*x/haxis=axis1;
  19. format x vfmt.;
  20. run;quit;
复制代码
三人行必有我师

7
honghejing 发表于 2011-7-27 11:25:47
把format 的other改为 other=" ";

8
qzlvyh 发表于 2011-7-27 14:09:58
axis1 minor=(number=1) value=( "0" "" "" "" "4" "" "" "" "8" "" "" "" "12" "13")  order=( 0 to 13 by 1 );

9
qzlvyh 发表于 2011-7-27 14:24:28

10
qzlvyh 发表于 2011-7-27 14:26:57
这个问题比较有趣,还有其他方法么??

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 03:04