【问题标题】:SAS plot SGPLOTSAS 图 SGPLOT
【发布时间】:2018-03-31 02:34:09
【问题描述】:

我有 3 列 A、B、C。我试图做一个叠加图,它显示了 B 的一行和 C 的一行(A 是 x 轴)。但是,当我使用下面的代码时,输​​出看起来超级难看。有什么更好的方法呢?谢谢。

proc plot data=djia;
   plot A*B='*'
        A*C='o' / overlay box;
   title 'Plot of Highs and Lows';
   title2 'for the Dow Jones Industrial Average';
run;

http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002473570.htm

【问题讨论】:

  • 你能显示输出吗?你能在djia 中显示数据吗? Proc PLOT 为单版打印机创建老式输出。你试过SGPLOT 或GPLOT 吗?
  • 这是 SAS 的一个例子(更新链接)。我尝试了 SGPLOT,但我不知道如何适用于我的情况。在大多数 SGPLOT 示例中,它们按组叠加。
  • 你只是问如何在同一张图中显示两个散点图?
  • 而不是分散,我希望它们显示为线条并且看起来不错。

标签: plot sas overlay


【解决方案1】:

在 SGPLOT 中,默认情况下,绘图语句会绘制到相同的绘图“画布”上,从而进行叠加。首先绘制第一个语句,因此您可以为叠加生成任何所需的“z 效果”。

绘制 djia 数据的示例。

proc sgplot data=djia;

  band x=year lower=low upper=high / fillatrrs=(color=vlig);

  series x=year y=high / markers;
  series x=year  y=low  / markers;

run;

SAS 知识库文章 http://support.sas.com/kb/51/821.html 展示了如何在低位和高位之间进行带状(填充)。

例如数据

* from http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a000075748.htm#a000075747 ;
data djia;
      input Year @7 HighDate date7. High @24 LowDate date7. Low;
      format highdate lowdate date7.;
      datalines;
1954  31DEC54  404.39  11JAN54  279.87
1955  30DEC55  488.40  17JAN55  388.20
1956  06APR56  521.05  23JAN56  462.35
1957  12JUL57  520.77  22OCT57  419.79
1958  31DEC58  583.65  25FEB58  436.89
1959  31DEC59  679.36  09FEB59  574.46
1960  05JAN60  685.47  25OCT60  568.05
1961  13DEC61  734.91  03JAN61  610.25
1962  03JAN62  726.01  26JUN62  535.76
1963  18DEC63  767.21  02JAN63  646.79
1964  18NOV64  891.71  02JAN64  768.08
1965  31DEC65  969.26  28JUN65  840.59
1966  09FEB66  995.15  07OCT66  744.32
1967  25SEP67  943.08  03JAN67  786.41
1968  03DEC68  985.21  21MAR68  825.13
1969  14MAY69  968.85  17DEC69  769.93
1970  29DEC70  842.00  06MAY70  631.16
1971  28APR71  950.82  23NOV71  797.97
1972  11DEC72 1036.27  26JAN72  889.15
1973  11JAN73 1051.70  05DEC73  788.31
1974  13MAR74  891.66  06DEC74  577.60
1975  15JUL75  881.81  02JAN75  632.04
1976  21SEP76 1014.79  02JAN76  858.71
1977  03JAN77  999.75  02NOV77  800.85
1978  08SEP78  907.74  28FEB78  742.12
1979  05OCT79  897.61  07NOV79  796.67
1980  20NOV80 1000.17  21APR80  759.13
1981  27APR81 1024.05  25SEP81  824.01
1982  27DEC82 1070.55  12AUG82  776.92
1983  29NOV83 1287.20  03JAN83 1027.04
1984  06JAN84 1286.64  24JUL84 1086.57
1985  16DEC85 1553.10  04JAN85 1184.96
1986  02DEC86 1955.57  22JAN86 1502.29
1987  25AUG87 2722.42  19OCT87 1738.74
1988  21OCT88 2183.50  20JAN88 1879.14
1989  09OCT89 2791.41  03JAN89 2144.64
1990  16JUL90 2999.75  11OCT90 2365.10
1991  31DEC91 3168.83  09JAN91 2470.30
1992  01JUN92 3413.21  09OCT92 3136.58
1993  29DEC93 3794.33  20JAN93 3241.95
1994  31JAN94 3978.36  04APR94 3593.35
;

【讨论】:

  • 我拿出乐队声明,这就是我需要的。
【解决方案2】:

一般而言,在 SGxxx 过程中,您只需添加更多语句即可让更多内容出现在图表上。例如,您可能希望在同一图表上显示 AGE * WEIGHT 和 AGE * HEIGHT 的回归线。

proc sort data=sashelp.class out=class ;
  by age;
run;
proc sgplot data=class;
  reg x=age y=weight / legendlabel='Weight';
  reg x=age y=height / legendlabel='Height' y2axis;
run;

【讨论】:

  • 我不需要 reg 线,而是连接每个点的实际线(并且没有出现点)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多