SAS - 可以在图形中的相同位置使用注释显示文本,无论是图例的大小还是图形的大小?
SAS - Possible to display text using annotate at the same position whithin the graph whichever the size of legend and size of graph?
在 SAS 中,我试图设置要在图表上显示的箭头的 'fixed' 位置。我希望箭头始终显示在同一位置,无论图形大小如何。现在,我使用 annotate 来显示箭头,其坐标 x1 和 y1 表示为图形区域的百分比 (DRAWSPACE='GRAPHPERCENT')。下面是我生成图表和注释数据集的代码:
DATA anno_test;
length function label ;
retain y1 15 drawspace 'GRAPHPERCENT';
function='ARROW';x1=15;x2=10;y2=15;linethickness=1;shape="FILLED";OUTPUT;
function='ARROW';x1=93;x2=98;y2=15;linethickness=1;shape="FILLED";OUTPUT;
RUN;
ODS GRAPHICS ON BORDER=OFF;
PROC SGPLOT DATA=_cumul sganno=anno_test NOBORDER;
STYLEATTRS DATALINEPATTERNS=(1 15 2 8 4 41);
STEP X=score Y=cum_pct/GROUP=newgroup lineattrs=(thickness=1.5);
YAXIS LABEL="Cumulative percentage of subjects" VALUES=(0 TO 100 BY 10) VALUEATTRS=(Size=9pt) LABELATTRS=(Size=10pt Weight=bold);
XAXIS LABEL="Score" VALUES=(-60 TO 60 BY 20) VALUEATTRS=(Size=9pt) LABELATTRS=(Size=10pt Weight=bold);
KEYLEGEND / TITLE=" " NOBORDER VALUEATTRS=(Size=7);
REFLINE 0 / AXIS=X LINEATTRS=(Pattern=34 Thickness=0.6);
REFLINE 50 / AXIS=Y LINEATTRS=(Pattern=34 Thickness=0.6);
RUN;
ODS GRAPHICS OFF;
我遇到的问题是,根据图例的大小和图表的大小,箭头可能会与 x 轴重叠。我不熟悉注释,但我尝试了不同的选项和绘图空间,但无论图例的大小如何,我都无法完美显示它。
有人有想法吗?或者我应该锁定图表的大小以避免这个“问题”?
谢谢!
尝试使用 DATAPERCENT
data have;
call streaminit(2020);
do score = -50 to 50 by 5;
z = 100;
do newgroup = 'A', 'B', 'C';
cum_pct = rand('integer',floor(z/2),z);
output;
z = z - cum_pct;
end;
newgroup = 'D';
cum_pct = z;
output;
end;
run;
DATA anno_test;
length function label ;
retain y1 15 DRAWSPACE 'DATAPERCENT';
function='ARROW';x1=10;x2= 0;y2=15;linethickness=1;shape="FILLED";OUTPUT;
function='ARROW';x1=90;x2=100;y2=15;linethickness=1;shape="FILLED";OUTPUT;
RUN;
箭头指向数据区域的边缘
当数据区域是较宽的 X 轴时相同的箭头
注释 y 值为 y1 = -10; y2 = -10;
时相同的箭头
在 SAS 中,我试图设置要在图表上显示的箭头的 'fixed' 位置。我希望箭头始终显示在同一位置,无论图形大小如何。现在,我使用 annotate 来显示箭头,其坐标 x1 和 y1 表示为图形区域的百分比 (DRAWSPACE='GRAPHPERCENT')。下面是我生成图表和注释数据集的代码:
DATA anno_test;
length function label ;
retain y1 15 drawspace 'GRAPHPERCENT';
function='ARROW';x1=15;x2=10;y2=15;linethickness=1;shape="FILLED";OUTPUT;
function='ARROW';x1=93;x2=98;y2=15;linethickness=1;shape="FILLED";OUTPUT;
RUN;
ODS GRAPHICS ON BORDER=OFF;
PROC SGPLOT DATA=_cumul sganno=anno_test NOBORDER;
STYLEATTRS DATALINEPATTERNS=(1 15 2 8 4 41);
STEP X=score Y=cum_pct/GROUP=newgroup lineattrs=(thickness=1.5);
YAXIS LABEL="Cumulative percentage of subjects" VALUES=(0 TO 100 BY 10) VALUEATTRS=(Size=9pt) LABELATTRS=(Size=10pt Weight=bold);
XAXIS LABEL="Score" VALUES=(-60 TO 60 BY 20) VALUEATTRS=(Size=9pt) LABELATTRS=(Size=10pt Weight=bold);
KEYLEGEND / TITLE=" " NOBORDER VALUEATTRS=(Size=7);
REFLINE 0 / AXIS=X LINEATTRS=(Pattern=34 Thickness=0.6);
REFLINE 50 / AXIS=Y LINEATTRS=(Pattern=34 Thickness=0.6);
RUN;
ODS GRAPHICS OFF;
我遇到的问题是,根据图例的大小和图表的大小,箭头可能会与 x 轴重叠。我不熟悉注释,但我尝试了不同的选项和绘图空间,但无论图例的大小如何,我都无法完美显示它。
有人有想法吗?或者我应该锁定图表的大小以避免这个“问题”? 谢谢!
尝试使用 DATAPERCENT
data have;
call streaminit(2020);
do score = -50 to 50 by 5;
z = 100;
do newgroup = 'A', 'B', 'C';
cum_pct = rand('integer',floor(z/2),z);
output;
z = z - cum_pct;
end;
newgroup = 'D';
cum_pct = z;
output;
end;
run;
DATA anno_test;
length function label ;
retain y1 15 DRAWSPACE 'DATAPERCENT';
function='ARROW';x1=10;x2= 0;y2=15;linethickness=1;shape="FILLED";OUTPUT;
function='ARROW';x1=90;x2=100;y2=15;linethickness=1;shape="FILLED";OUTPUT;
RUN;
箭头指向数据区域的边缘
当数据区域是较宽的 X 轴时相同的箭头
注释 y 值为 y1 = -10; y2 = -10;