SAS Viya 3.5中PROC SGRENDER生成图表显示黑块问题求助
解决SAS Viya 3.5循环生成SGRENDER图表显示黑块的问题
你碰到的循环生成SVG图表在作业链接里显示黑块、本地保存HTML后正常的情况,可尝试这几个调整方案:
方案1:调整ODS HTML5的SVG输出模式
当前用的svg_mode="inline"在Viya 3.5的动态作业环境里可能存在渲染时序问题,试试兼容设置:
ods html5 options(svg_mode="inline" embedded_images=on);
或者切换到外部SVG模式(注意确保路径权限足够生成对应文件):
ods html5 options(svg_mode="external"); ods graphics / outputfmt=svg imagename=plot_ prefix=svg;
方案2:把模板定义移出循环
每次循环重复定义ArrowPlot模板可能导致渲染资源未正确释放,将模板定义放到宏外部,通过宏变量传递参数:
PROC TEMPLATE; DEFINE STATGRAPH ArrowPlot; BEGINGRAPH ; ENTRYTITLE "Model: &ShortName."; LAYOUT OVERLAY / WALLDISPLAY=(FILL) XAXISOPTS=(DISPLAY=NONE LINEAROPTS=(VIEWMIN=-0.05 VIEWMAX=1.05)) YAXISOPTS=(DISPLAY=NONE LINEAROPTS=(VIEWMIN=-0.6 VIEWMAX=3)); POLYGONPLOT X=x Y=y ID=Id / COLORRESPONSE=Sign COLORMODEL=(lightblue Pink) DISPLAY=(OUTLINE FILL) OUTLINEATTRS=(COLOR=white THICKNESS=2px); ENDLAYOUT; ENDGRAPH; END; RUN; %macro CreatePlots; %local model i; %do i=1 %to %sysfunc(countw(&modelid_list.,%str( ))); %LET model = %scan(&modelid_list., &i.,%str( )); %put &=model; PROC SQL NOPRINT; SELECT distinct Name into :ShortName FROM PlotData WHERE modelID=&model.; QUIT; PROC SGRENDER DATA=PlotData(where=(modelID=&model.)) TEMPLATE=ArrowPlot; RUN; %end; %mend CreatePlots; %CreatePlots;
方案3:优化ODS GRAPHICS渲染参数
给ods graphics添加抗锯齿、固定尺寸参数,提升动态渲染兼容性:
ods graphics / outputfmt=svg antialiasing=on width=800px height=600px;
方案4:修复ODS语句的语法错误
原代码最后一行ods listing缺少分号,确保ODS输出正确关闭:
ods html5 (id=web) close; ods listing;
问题根源
直接访问作业链接时,浏览器动态加载Viya服务器返回的内容,内联SVG可能因服务器响应头、渲染时序或Viya 3.5的特定bug未被正确解析;本地保存后是静态HTML文件,浏览器能完整解析所有SVG节点,因此显示正常。
内容的提问来源于stack exchange,提问作者anytnelav
相关产品推荐
相关产品推荐

