楼主: BraveMadMan
5951 35

[程序分享] 如何生成这个图 [推广有奖]

11
jingju11 发表于 2010-7-13 10:57:13
9# BraveMadMan

拥挤的x轴还是存在。也就是说你对x轴做value的定义是无效的。

12
蓝色 发表于 2010-7-13 10:58:50
不懂sas作图

stata作图容易一些

13
BraveMadMan 发表于 2010-7-13 11:01:58
jingju11 发表于 2010-7-13 10:57
9# BraveMadMan

拥挤的x轴还是存在。也就是说你对x轴做value的定义是无效的。
是呀,不知道是什么原因。

14
BraveMadMan 发表于 2010-7-13 11:03:38
jingju11 发表于 2010-7-13 10:31
2# Brav
adMan


对于我来讲,很难。都用的是discrete axis。不知道有什么方法有选择性地标注x轴的数据。
按道理讲不应该是discrete axis,因为x轴的数据是时间。但是不知为何SAS认为是discret数据。

15
jingju11 发表于 2010-7-13 11:12:22
连续的数轴是我们所愿望的。但是无论vline还是vbar用的都是discrete的数轴,因为他们都是classification 类的制图。举个例子,如果你改变date的format成year2., 你会得到一个更宽的条形图。因为这个画法,就会造成不兼容,也就是说,你很可能不能用series一类的要求continuous 轴的画法。
已有 1 人评分学术水平 热心指数 收起 理由
BraveMadMan + 1 + 1 有道理

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

16
jingju11 发表于 2010-7-13 11:17:09
我记得你曾经解决过一个问题过于scatter 和density plot 并于一张图的例子。其实,说白了,你不得不cheat sas,用univariate生成的数据来画density。用生成的对频率的估计值来替代sas在histogram里自动计算的频率。另外,或许你没有注意,你的图是依赖于endpoints的选择。这也是你为什么看到一些点的频率居然为0.也就说,你‘捏造’了一些子虚乌有的点。

17
BraveMadMan 发表于 2010-7-13 11:26:47
一本书上的一个例子

Proc template;
define statgraph needle;
   begingraph;
    entrytitle 'Stock Trends';
    layout overlay;
      needleplot x=date y=close;
    endlayout;
   endgraph;
end;
run;

proc sgrender data=sashelp.stocks template=needle;
run;

proc sgplot data=sashelp.stocks;
title 'Stock Trends';
needle x=date y=close;
run;

fig4.PNG

18
jingju11 发表于 2010-7-13 11:36:10
16# BraveMadMan

原因是,needle plot用的是连续轴。needle 画法的特点是基于基准线做有宽度的垂线。既然如此,我猜想可以用0做基线,向上用正值,下为负值。然后在用series做vline。前提是你得把你的数据变一变。

19
BraveMadMan 发表于 2010-7-13 13:30:20
先这样吧,虽然还能再调。
fig5.png

20
BraveMadMan 发表于 2010-7-13 13:31:15
goptions reset=(symbol pattern axis);

proc gplot data=stat_qtr1;
format yqtr yyqc.;
  plot p_pos*yqtr=1 p_neg*yqtr=2/ overlay hminor=0 vaxis=axis1 haxis=axis2;
  plot2 all*yqtr=3 / overlay vaxis=axis3 ;
  symbol1 i=needle c=red w=4;
  symbol2 i=needle c=blue w=4;
  symbol3 i=join c=green w=3 v= h=2;
  title1 "Overlay bar graph with line";
  axis1 c=blue order=(-15 to 30 by 10) label=(angle=90 rotate=0 'Percentage');
  axis2 c=black label=('Year Qtr');
  axis3 c=green order=(-5000 to 5000 by 1000)  label=(angle=90 rotate=0 '# of observations');
run;
quit;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 17:23