BookmarkSubscribeRSS Feed
OrangePeel
Obsidian | Level 7

When I output PNG, the legend text can be fully displayed,

but when I output vector graphics, the last letter may be obscured,

and using the OUTERPAD options does not work

 

OrangePeel_0-1742200399783.png

 

6 REPLIES 6
RichardAD
Quartz | Level 8

The text truncation is likely due to the ODS destination incorrectly calculating a bounding box for the text in the given font, essentially a bug.

 

A typical work around is to suffix your values with one or more hard space characters (hex A0).  

If the legend value is coming from data:

 

length my_new_legend_var $50 ;
my_new_legend_var = cats(my_legend_var,"A0A0"x) ;

 

Can you share the legend statement ?

OrangePeel
Obsidian | Level 7
data final;
  infile datalines truncover;
  input subjid $ trt01pn trtdy;
  datalines;
S07007 7 28.285714286
S03006 7 23.142857143
S03003 7 23.428571429
S11010 6 5.4285714286
S06005 6 11.857142857
;
run;

ods listing close;
ods rtf file="&_currentroot./f3.rtf" style=TLStyle nogtitle nogfootnote device=emf;
ods escapechar='@';

/*ods graphics/outputfmt=png;*/
options orientation=PORTRAIT;

%macro Swimmerplot;

  proc template;
    define statgraph Swimmer;
      begingraph / designwidth=1080 designheight=1300 border=false backgroundcolor=white;
        discreteattrmap name="trt01p" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=Green  symbol=circlefilled) lineattrs=GraphData1(color=Green pattern=solid ) fillattrs=GraphData1(color=Green);
          value "2" /markerattrs=GraphData1(color=Bib  symbol=circlefilled) lineattrs=GraphData1(color=Bib pattern=solid ) fillattrs=GraphData1(color=Bib);
          value "3" /markerattrs=GraphData1(color=Bio  symbol=circlefilled) lineattrs=GraphData1(color=Bio pattern=solid ) fillattrs=GraphData1(color=Bio);
          value "4" /markerattrs=GraphData1(color=Brown  symbol=circlefilled) lineattrs=GraphData1(color=Brown pattern=solid ) fillattrs=GraphData1(color=Brown);
          value "5" /markerattrs=GraphData1(color=gray  symbol=circlefilled) lineattrs=GraphData1(color=gray pattern=solid ) fillattrs=GraphData1(color=gray);
          value "6" /markerattrs=GraphData1(color=Bigy  symbol=circlefilled) lineattrs=GraphData1(color=Bigy pattern=solid ) fillattrs=GraphData1(color=Bigy);
          value "7" /markerattrs=GraphData1(color=Pink  symbol=circlefilled) lineattrs=GraphData1(color=Pink pattern=solid ) fillattrs=GraphData1(color=Pink);
          value "8" /markerattrs=GraphData1(color=Bigb  symbol=circlefilled) lineattrs=GraphData1(color=Bigb pattern=solid ) fillattrs=GraphData1(color=Bigb);
        enddiscreteattrmap;
        discreteattrvar attrvar=markers_trt01p var=trt01pn  attrmap="trt01p";
        legenditem type=marker  name="L9" / LABELATTRS=(color=black  family="Arial" size=10pt) markerattrs=(color=black symbol=TriangleRightFilled size=10pt)  label="On Treatment";
        legenditem type=marker  name="L10" / LABELATTRS=(color=black  family="Arial" size=10pt) markerattrs=(color=viro symbol=X size=10pt)  label="Treatment Discontinued";

        layout overlay / wallcolor=white walldisplay=none 
          xaxisopts=( label=("Time (Weeks)")  labelattrs=(color=black family="Arial" size=10pt) tickvalueattrs=(family="Arial" size=10pt weight=normal )
          linearopts=( tickvaluesequence=(start=0 end=&xend. increment=&xincrement.) tickvaluepriority=true))
          yaxisopts=(  display=(tickvalues ) tickvalueattrs=(family="Arial" size=10pt weight=normal ) discreteopts=( tickvaluefitpolicy=none));
          barchart category=subjid response=trtdy / group=markers_trt01p datatransparency=0.3 
            display=(fill) stat=mean barlabel=false orient=horizontal barwidth=0.6 groupdisplay=stack clusterwidth=0.1;
          discretelegend  
            'S7' 'L9' 'L10'
            /
            opaque=true border=false displayclipped=true across=1 order=columnmajor outerpad=auto valueattrs=(color=black family="Arial" size=10pt)
            titleborder=false location=inside valign=bottom halign=right titleattrs=GraphValueText(color=black  family="Arial" size=10pt);
        endlayout;
      endgraph;
    end;
  run;

%mend;

%Swimmerplot;

data _blank;
  blank="";
run;

ods rtf startpage=no;

proc report data=_blank nowindows
  style(report)={pretext="\outlinelevel2 f3 \fs1"}
;
  column blank;
  define blank/noprint;
run;

proc sgrender data=final template=Swimmer;
run;

ods graphics off;
ods rtf close;
ods results on;
ods listing close;

this is a test program, thanks

Ksharp
Super User

I did not get any problem.

data final;
  infile datalines truncover;
  input subjid $ trt01pn trtdy;
  datalines;
S07007 7 28.285714286
S03006 7 23.142857143
S03003 7 23.428571429
S11010 6 5.4285714286
S06005 6 11.857142857
;
run;

ods listing close;
ods rtf file="c:\temp\f3.rtf" style=TLStyle nogtitle nogfootnote device=emf;
ods escapechar='@';

/*ods graphics/outputfmt=png;*/
options orientation=PORTRAIT;

%macro Swimmerplot;

  proc template;
    define statgraph Swimmer;
      begingraph / designwidth=1080 designheight=1300 border=false backgroundcolor=white;
        discreteattrmap name="trt01p" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=Green  symbol=circlefilled) lineattrs=GraphData1(color=Green pattern=solid ) fillattrs=GraphData1(color=Green);
          value "2" /markerattrs=GraphData1(color=Bib  symbol=circlefilled) lineattrs=GraphData1(color=Bib pattern=solid ) fillattrs=GraphData1(color=Bib);
          value "3" /markerattrs=GraphData1(color=Bio  symbol=circlefilled) lineattrs=GraphData1(color=Bio pattern=solid ) fillattrs=GraphData1(color=Bio);
          value "4" /markerattrs=GraphData1(color=Brown  symbol=circlefilled) lineattrs=GraphData1(color=Brown pattern=solid ) fillattrs=GraphData1(color=Brown);
          value "5" /markerattrs=GraphData1(color=gray  symbol=circlefilled) lineattrs=GraphData1(color=gray pattern=solid ) fillattrs=GraphData1(color=gray);
          value "6" /markerattrs=GraphData1(color=Bigy  symbol=circlefilled) lineattrs=GraphData1(color=Bigy pattern=solid ) fillattrs=GraphData1(color=Bigy);
          value "7" /markerattrs=GraphData1(color=Pink  symbol=circlefilled) lineattrs=GraphData1(color=Pink pattern=solid ) fillattrs=GraphData1(color=Pink);
          value "8" /markerattrs=GraphData1(color=Bigb  symbol=circlefilled) lineattrs=GraphData1(color=Bigb pattern=solid ) fillattrs=GraphData1(color=Bigb);
        enddiscreteattrmap;
        discreteattrvar attrvar=markers_trt01p var=trt01pn  attrmap="trt01p";
        legenditem type=marker  name="L9" / LABELATTRS=(color=black  family="Arial" size=10pt) markerattrs=(color=black symbol=TriangleRightFilled size=10pt)  label="On Treatment";
        legenditem type=marker  name="L10" / LABELATTRS=(color=black  family="Arial" size=10pt) markerattrs=(color=viro symbol=X size=10pt)  label="Treatment Discontinuedxxxx yyyy";

        layout overlay / wallcolor=white walldisplay=none 
          xaxisopts=(label=("Time (Weeks)")  labelattrs=(color=black family="Arial" size=10pt) tickvalueattrs=(family="Arial" size=10pt weight=normal )
          linearopts=( tickvaluesequence=(start=0 end=30 increment=5) tickvaluepriority=true))
          yaxisopts=(  display=(tickvalues ) tickvalueattrs=(family="Arial" size=10pt weight=normal ) discreteopts=( tickvaluefitpolicy=none));
          barchart category=subjid response=trtdy / group=markers_trt01p datatransparency=0.3 
            display=(fill) stat=mean barlabel=false orient=horizontal barwidth=0.6 groupdisplay=stack clusterwidth=0.1;
          discretelegend  
            'S7' 'L9' 'L10'
            /
            opaque=true border=false displayclipped=true across=1 order=columnmajor outerpad=auto valueattrs=(color=black family="Arial" size=10pt)
            titleborder=false location=inside valign=bottom halign=right titleattrs=GraphValueText(color=black  family="Arial" size=10pt);
        endlayout;
      endgraph;
    end;
  run;

%mend;

%Swimmerplot;

data _blank;
  blank="";
run;

ods rtf startpage=no;

proc report data=_blank nowindows
  style(report)={pretext="\outlinelevel2 f3 \fs1"}   
;
  column blank;
  define blank/noprint;
run;

proc sgrender data=final template=Swimmer;
run;

ods graphics off;
ods rtf close;
ods results on;
ods listing close;

Ksharp_0-1742375080374.png

 

OrangePeel
Obsidian | Level 7
I ran out on the local SAS just like you, but there was obstruction when I ran out on the server
Ksharp
Super User
It would be better to post your data and code to replicate your problem.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 6 replies
  • 1102 views
  • 1 like
  • 3 in conversation