SAS PROC GMAP 注释区域

SAS PROC GMAP Annotate Regions

我在注释我使用 Gmap 程序 (SAS 9.4) 创建的地图时遇到困难。

我有一个为两个区域(XX 和 YY)创建的自定义形状数据集。 XX实际上是由两个形状组成的不相交区域。

我有两个问题:

  1. Proc 试图将区域 XX 绘制为一个连续区域,即使我已将其定义为两个单独的子多边形。
  2. 尽管我尝试使用 %centroid 宏来构建注释集,但标签并未填充在形状的质心中。坐标看起来是正确的,但文本没有显示在正确的位置。

这是我整理的代码。

data map;
    input Area $ Y X POINTORDER SUB_POLYGON_NUMBER POLYGON_NUMBER;
    cards;
XX 1 1 1 1 1
XX 2 1 2 1 1
XX 3 1 3 1 1
XX 3 2 4 1 1
XX 3 3 5 1 1
XX 2 3 6 1 1
XX 1 3 7 1 1
XX 1 2 8 1 1
XX -1 0 1 2 1
XX -2 0 2 2 1
XX -1 -2 3 2 1
YY 7 7 1 1 2
YY 7 8 2 1 2
YY 8 9 3 1 2
;
run;

data sales; 
    input Area $ Sales;
datalines;
XX 500
YY 200
;
run;

%annomac;

%CENTROID(map,anno,Area,segonly=1); 

data anno;
    set anno;
    text=Area;
    function='label';
    style="'Albany AMT/bold'";
run;

proc gmap data = sales map=map;
  id Area;
  choro Sales / nolegend annotate=anno;
run;
quit;

我不确定你问题的第一部分,但你可能应该将它们分成两个问题 - 这是两个不同的问题。

关于问题标题中的问题,注释文本的位置,你有两个问题。

一:您的注释文本未使用相同的坐标系。在 SAS/GRAPH 中,这是由 XSYSYSYS 等变量控制的。 4是默认值,这是整个图像的值;这不是你想要的。你在这里想要的是2,它只在数据space中(即实际上在绘制的轴上)。

您还需要使其可见:默认情况下,它不会被绘制为 "over" 图形元素。

data anno;
    set anno;
    text=Area;
    function='label';
    style="'Albany AMT/bold'";
    color='Red';
    when='After';
    xsys='2';
    ysys='2';
run;

我把它设为红色是为了更显眼,当然你也可以用黑色。

请注意,我使用单个多边形对此进行了测试(我删除了子多边形=2);我不确定如果你同时拥有两者会发生什么,但居中可能会有点奇怪。

正如 Joe 所说,这将是两个问题。我会回复第一部分,因为乔已经回答了第二部分。

通过打开MAPS.Sweden,我发现区域标识符,你的POLYGON_NUMBERSUB_POLYGON_NUMBER,叫做IDSEGMENT。因此,如果您根据 map 定义中的名称更改您的列名称,您将获得想要的结果。

data map;
    input Area $ Y X POINTORDER SEGMENT ID;
    cards;
XX 1 1 1 1 1
XX 2 1 2 1 1
XX 3 1 3 1 1
XX 3 2 4 1 1
XX 3 3 5 1 1
XX 2 3 6 1 1
XX 1 3 7 1 1
XX 1 2 8 1 1
XX -1 0 1 2 1
XX -2 0 2 2 1
XX -1 -2 3 2 1
YY 7 7 1 1 2
YY 7 8 2 1 2
YY 8 9 3 1 2
;
run;

我以前没有用过gmap,所以很有趣。我试图阅读文档以了解应如何命名列才能使其正常工作。我没有找到任何东西,但它应该在某个地方。如果您知道我可以在哪里阅读,请发表评论。