Graphics Programming

Data visualization using SAS programming, including ODS Graphics and SAS/GRAPH. Charts, plots, maps, and more!
BookmarkSubscribeRSS Feed
Minki
Calcite | Level 5

I want to create a graph using GTL (SAS 9.4) which completely uses CMYK pure process black color. I replaced (hopefully) all colors in my style definition with CMYK color black (CMYK000000FF) or white (CMYK00000000) and create my statgraph definitions. The figure as PDF file looks as expected, but looking into the color scheme, black is not presented as pure black (CMYK000000FF) but as a combination of RGB values (e.g., cyan 75%, magenta 68%, yallow 67%, process black 90%)..

Are thee any hints or ideas what's going wrong?

 

Here's my code (looks long because of all the color defintions):

%LET color=CMYK000000FF;

%**** Define the template;

%let __font = %str(Arial);

%let __fontsz = %str(8pt);

%let __fontsz2 = %str(6pt);

proc template;

define style cmfm;

parent=styles.listing;

style color_list

"Colors used in the listing style" /

'fgB2' = CMYK000000FF

'fgB1' = CMYK000000FF

'fgA4' = CMYK000000FF

'bgA4' = CMYK000000FF

'bgA3' = CMYK00000000

'fgA2' = CMYK000000FF

'bgA2' = CMYK000000FF

'fgA1' = CMYK000000FF

'bgA1' = CMYK000000FF

'fgA' = CMYK000000FF

'bgA' = CMYK00000000;

style GraphColors

"Abstract colors used in graph styles" /

'goffill' = CMYK000000FF

'gofill' = CMYK000000FF

'govbline' = CMYK000000FF

'gobline' = CMYK000000FF

'gncdata12' = CMYK000000FF

'gndata12' = CMYK000000FF

'gncdata11' = CMYK000000FF

'gndata11' = CMYK000000FF

'gncdata10' = CMYK000000FF

'gndata10' = CMYK000000FF

'gncdata9' = CMYK000000FF

'gndata9' = CMYK000000FF

'gncdata8' = CMYK000000FF

'gndata8' = CMYK000000FF

'gncdata7' = CMYK000000FF

'gndata7' = CMYK000000FF

'gncdata6' = CMYK000000FF

'gndata6' = CMYK000000FF

'gncdata5' = CMYK000000FF

'gndata5' = CMYK000000FF

'gncdata4' = CMYK000000FF

'gndata4' = CMYK000000FF

'gncdata3' = CMYK000000FF

'gndata3' = CMYK000000FF

'gncdata2' = CMYK000000FF

'gndata2' = CMYK000000FF

'gncdata1' = CMYK000000FF

'gndata1' = CMYK000000FF

'gncdata' = CMYK000000FF

'gndata' = CMYK000000FF

'gnclink' = CMYK000000FF

'gnlink' = CMYK000000FF

'gntext' = CMYK000000FF

'gblockheader' = CMYK000000FF

'gcphasebox' = CMYK000000FF

'gphasebox' = CMYK000000FF

'gczonec' = CMYK000000FF

'gzonec' = CMYK000000FF

'gczoneb' = CMYK000000FF

'gzoneb' = CMYK000000FF

'gzonea' = CMYK000000FF

'gcunder' = CMYK000000FF

'gunder' = CMYK000000FF

'gcover' = CMYK000000FF

'gover' = CMYK000000FF

'gcfinal' = CMYK000000FF

'gfinal' = CMYK000000FF

'gcinitial' = CMYK000000FF

'ginitial' = CMYK000000FF

'gcother' = CMYK000000FF

'gother' = CMYK000000FF

'gcmiss' = CMYK000000FF

'gmiss' = CMYK000000FF

'gablock' = CMYK000000FF

'gblock' = CMYK000000FF

'gcclipping' = CMYK000000FF

'gclipping' = CMYK000000FF

'gcstars' = CMYK000000FF

'gstars' = CMYK000000FF

'gcruntest' = CMYK000000FF

'gruntest' = CMYK000000FF

'gccontrollim' = CMYK000000FF

'gcontrollim' = CMYK000000FF

'gcerror' = CMYK000000FF

'gerror' = CMYK000000FF

'gcpredictlim' = CMYK000000FF

'gpredictlim' = CMYK000000FF

'gcpredict' = CMYK000000FF

'gpredict' = CMYK000000FF

'gcconfidence2' = CMYK000000FF

'gcconfidence' = CMYK000000FF

'gconfidence2' = CMYK000000FF

'gconfidence' = CMYK000000FF

'gcfit2' = CMYK000000FF

'gcfit' = CMYK000000FF

'gfit2' = CMYK000000FF

'gfit' = CMYK000000FF

'gcoutlier' = CMYK000000FF

'goutlier' = CMYK000000FF

'gcdata' = CMYK000000FF

'gdata' = CMYK000000FF

'greferencelines' = CMYK000000FF

'gheader' = colors('docbg')

'gconramp3cend' = CMYK000000FF

'gconramp3cneutral' = CMYK00000000

'gconramp3cstart' = CMYK000000FF

'gramp3cend' = CMYK000000FF

'gramp3cneutral' = CMYK000000FF

'gramp3cstart' = CMYK000000FF

'gconramp2cend' = CMYK000000FF

'gconramp2cstart' = CMYK000000FF

'gramp2cend' = CMYK000000FF

'gramp2cstart' = CMYK000000FF

'gtext' = CMYK000000FF

'glabel' = CMYK000000FF

'gborderlines' = CMYK000000FF

'goutlines' = CMYK000000FF

'ggrid' = CMYK000000FF

'gaxis' = CMYK000000FF

'gshadow' = CMYK000000FF

'glegend' = CMYK00000000

'gfloor' = CMYK00000000

'gwalls' = CMYK00000000

'gcdata12' = CMYK000000FF

'gcdata11' = CMYK000000FF

'gcdata10' = CMYK000000FF

'gcdata9' = CMYK000000FF

'gcdata8' = CMYK000000FF

'gcdata6' = CMYK000000FF

'gcdata7' = CMYK000000FF

'gcdata4' = CMYK000000FF

'gcdata5' = CMYK000000FF

'gcdata3' = CMYK000000FF

'gcdata2' = CMYK000000FF

'gcdata1' = CMYK000000FF

'gdata12' = CMYK000000FF

'gdata11' = CMYK000000FF

'gdata10' = CMYK000000FF

'gdata9' = CMYK000000FF

'gdata8' = CMYK000000FF

'gdata6' = CMYK000000FF

'gdata7' = CMYK000000FF

'gdata4' = CMYK000000FF

'gdata5' = CMYK000000FF

'gdata3' = CMYK000000FF

'gdata2' = CMYK000000FF

'gdata1' = CMYK000000FF;

style GraphAxisLines / ContrastColor=&color;

style GraphData1 / ContrastColor=&color Linestyle=1 markersymbol = "Circle";

style GraphData2 / ContrastColor=&color Linestyle=4 markersymbol = "Square";

style GraphData3 / ContrastColor=&color Linestyle=2 markersymbol = "Diamond";

style GraphData4 / ContrastColor=&color Linestyle=1 markersymbol = "CircleFilled";

style GraphData5 / ContrastColor=&color Linestyle=4 markersymbol = "SquareFilled";

style GraphData6 / ContrastColor=&color Linestyle=2 markersymbol = "DiamondFilled";

end;

run;

 

proc template;

define statgraph Graphics.timechange_a;

dynamic _title1 _title2 _title3 _footnote1 _footnote2 _footnote3

_xvar _xlabel _yvar1 _ylabel _group

_displayopt ;

mvar __nullrep;

begingraph / border=0 ;

/* layout lattice ;*/

/* Graph layout declaration */

layout overlay / pad=0 border = false walldisplay = none

xaxisopts = (

label = ( "Week" )

labelattrs = (color=&color weight=normal size=&__fontsz family="&__font")

tickvalueattrs = (color=&color weight=normal size=&__fontsz family="&__font")

offsetmin = 0.05

offsetmax = 0.05

linearopts = (tickvaluesequence=(start=0 end=24 increment=6))

display = _displayopt

)

yaxisopts = (

label = ( "Adjusted* Mean A1C (%) Change from Baseline")

labelattrs = (color=&color weight=normal size=&__fontsz family="&__font")

tickvalueattrs = (color=&color weight=normal size=&__fontsz family="&__font")

offsetmin = 0.05

offsetmax = 0.05

linearopts = (tickvaluesequence=(start=-2.5 end=1.5 increment=0.5) tickvalueformat=4.1 viewmin=-2.0 viewmax=0.5)

display = _displayopt )

opaque = false ;

/* line - stepped */

seriesplot x=_xvar y=_yvar1 / connectorder = xvalues display = all

lineattrs=(thickness=1px) group=_group name="seriesA";

discretelegend "seriesA" /

location=outside

across=1

valueattrs=(color=&color weight=normal size= 10pt family="&__font")

halign=left valign=bottom

backgroundcolor=white

opaque=1

border=FALSE

;

endlayout;

/* Add titles and footnotes */

entryfootnote halign=left textattrs=(color=&color weight=normal size=&__fontsz family="&__font") _footnote1 / textfitpolicy=wrap;

entryfootnote halign=left textattrs=(color=&color weight=normal size=&__fontsz family="&__font") _footnote2 / textfitpolicy=wrap;

entryfootnote halign=left textattrs=(color=&color weight=normal size=&__fontsz family="&__font") _title1 / textfitpolicy=wrap pad=(top=3px);

entryfootnote halign=left textattrs=(color=&color weight=normal size=&__fontsz family="&__font") _title2 / textfitpolicy=wrap;

entryfootnote halign=right textattrs=(color=&color weight=normal size=&__fontsz family="&__font") _footnote3 / textfitpolicy=wrap;

endgraph;

end;

run;

 

ODS LISTING STYLE=cmfm image_dpi=300 GPATH="\\client\C$\temp\test" ;

ODS GRAPHICS ON / RESET=all IMAGENAME="adhoc12353_4" IMAGEFMT=pdf WIDTH=7.7cm NOBORDER ;

/* Produce graph */

proc sgrender data=inplot

template=Graphics.timechange_a

object=CMF

objectlabel="Time plot";

DYNAMIC

_title1 =" "

_title2 =" "

_footnote1 = ""

_footnote2 = "*Variables used in adjustment: Baseline A1C and prior use of OADs"

_footnote3 = " "

_xvar = "tptno"

_yvar1 = "estimate"

_group = "atrsort"

_displayopt="all"

;

format atrsort $_trt1v.;

run;

 

 

1 REPLY 1
ldenney
Obsidian | Level 7

I'm interested in this answer as well as my issue seems similar. We are writing out PDF files to send to a professional printer using CMYK and the professional printer is indicating it is coming to them as RGB. 

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

Register now!

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
  • 1 reply
  • 1695 views
  • 0 likes
  • 2 in conversation