Creating Maps with SAS/GRAPH - Drill Downs, Pop-Ups, and Animation Creating Maps with SAS/GRAPH Today’s talk • • • • • • Basic capabilities of PROC GMAP Knowledge of SAS map data sets Colors and gray scales for choropleth maps Outline map Direct a graphics output to GIF and PDF files; New features: drill-downs, pop-ups, and animation. Creating Maps with SAS/GRAPH QUICK LOOK AT BASICS • STATIC DISPLAYS FOUR MAP TYPES • DRILL-DOWNS • POP-UPS • ANIMATION CHOROPLETH PRISM BLOCK SURFACE Creating Maps with SAS/GRAPH DATA SETS USED 1. CANADIAN POPULATION SOURCE: STATISTICS CANADA 2. Data sets that define the boundaries of areas that are mapped. SAS/GRAPH provides map data sets that allow one to create one or more maps of nearly every country in the world. All the maps are located in a MAPS subdirectory under the SAS root directory. Note, SAS/GRAPH maps must be installed to use the SAS-supplied maps. Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP Creates two-dimensional maps in which values of the specified response variables are represented by varying patterns and colors. Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP Production of a map with the GMAP procedure requires both a response and a map data set. • SAS-SUPPLIED MAP OF CANADIAN PROVINCES (MAP) contains the information needed to draw map boundaries. • 2001 POPULATION DATA (RESPONSE) Contains the data that are to be displayed in a map. • MATCH MAP AND RESPONSE DATA SETS COMMON VARIABLE SAME NAME, SAME TYPE SIMILAR TO DATA STEP MERGE Creating Maps with SAS/GRAPH • 2001 POPULATION DATA: produces a map of the distribution of population data canada_pop; Input province: $2. province_name & : $21. pop_2001: comma.; Label pop_2001 = 'POPULATION 2001‘ ; format pop: area: comma10.; datalines; 10 NEWFOUNDLAND 512,930 11 PRINCE EDWARD ISLAND 135,294 12 NOVA SCOTIA 908,007 13 NEW BRUNSWICK 729,498 24 QUEBEC 7,237,479 35 ONTARIO 11,410,046 46 MANITOBA 1,119,583 47 SASKATCHEWAN 978,933 48 ALBERTA 2,974,807 59 BRITISH COLUMBIA 3,907,738 60 YUKON 28,674 61 NORTHWEST TERRITORIES 64,105; run; Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP goptions reset=all; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX01.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; choro pop_2001; /*specifies the variable that are represented on the map */ run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP goptions reset=all; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX01.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; choro pop_2001 / levels=3; /*control the number of colors*/ run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP goptions reset=all; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX01.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; /*control the number of color: the number of response levels */ choro pop_2001 / discrete; *format pop_2001 popfmt.; run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP • USE FEW OPTIONS DEFAULT PATTERN SAS automatically determines the midpoints and assigns patterns to the map areas. LEVELS OPTION DISCRETE OPTION + USER-WRITTEN FORMAT LEGEND the CHORO statement produces a legend unless you use the NOLEGEND option or user-defined legend. Creating Maps with SAS/GRAPH EXAMPLE 1: CHOROPLETH MAP NOTICE • FONTS • DEFAULT COLOR SELECTION • POSITION AND LAYOUT OF LEGEND (Nunavut is not shown separated from the Northwest Territories since current SAS/GRAPH maps of Canada contain no boundary definitions for Nunavut.) Creating Maps with SAS/GRAPH EXAMPLE 2 PRISM MAP (same data) • Creates three-dimensional prism maps in which levels of magnitude of the specified response variables are represented by polyhedrons (raised polygons) of varying height, pattern, and color. Creating Maps with SAS/GRAPH EXAMPLE 2 PRISM MAP (same data) goptions reset=all; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX02.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; prism pop_2001; /*specifies the variable that are represented on the map */ run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 2 PRISM MAP (same data) goptions reset=all; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX02.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; /* change the viewing angle of the map */ prism pop_2001 / zview=10.0 yview=-3.0 xview=-5.0; run; quit; title; footnote; Creating Maps with SAS/GRAPH EXAMPLE 2 : • PRISM MAP CHANGE VIEWING ANGLE The XVIEW, YVIEW, and ZVIEW specify the viewing position coordinates for the map. The XVIEW, YVIEW, and ZVIEW options on the RISM statement change the viewing position from the default value of a position above and to the south of the center of the map (values of .5, 2.0, and 3.0 for the x, y, and z views respectively). Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 2 PRISM MAP (same data) goptions reset=all; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX02.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; /* change the viewing angle of the map and light source */ prism pop_2001 / zview=10.0 yview=-3.0 xview=-5.0 ylight=2; run; quit; title; footnote; Creating Maps with SAS/GRAPH EXAMPLE 2 : • PRISM MAP CHANGE LIGHT SOURCE XLIGHT, YLIGHT specify the coordinates of the imagined light source in the map coordinate system. The position of the light source controls the appearance of the edges of the map areas. The XLIGHT= and YLIGHT= options are used to shadow the side polygons of the prisms. Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 2 : PRISM MAP NOTICE • USING TWO FEATURES TO CONTRAST MAP AREAS - COLOR AND PRISM HEIGHT (GOOD IDEA?) • MIGHT HAVE TO ADJUST VIEWING ANGLE TO MAKE ALL MAP AREAS VISIBLE Creating Maps with SAS/GRAPH EXAMPLE 3: BLOCK MAP Creates three-dimensional block maps on which levels of magnitude of the specified response variables are represented by blocks of varying height, pattern, and color. Creating Maps with SAS/GRAPH EXAMPLE 3 BLOCK MAP (same data) *** reset all graphics options to default values; options reset=all; *** create a block map with a title and a footnote; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX03.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; block pop_2001; run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 3 BLOCK MAP (same data) *** reset all graphics options to default values; options reset=all; *** create a block map with a title and a footnote; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX03.SAS '; pattern1 v=s c=red r=12; pattern2 v=ms c=green; proc gmap data=canada_pop map=maps.canada2; id province; block pop_2001 / levels=12 shape=cylinder blocksize=5 xview=1.8 yview=-1.2 zview=1.0 nolegend coutline=black; run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 3: • BLOCK MAP PATTERN statements create PATTERN definitions that define the color and type of area fill for patterns used in map areas in choropleth, block, and prism maps; blocks in block maps. COLOR=pattern-color VALUE=block/map-pattern • • block-pattern: EMPTY / SOLID map-pattern: MEMPTY / MSOLID REPEAT=number-of-times specifies the number of times that a PATTERN definition is applied before the next PATTERN definition is used. By default, REPEAT=1. Creating Maps with SAS/GRAPH EXAMPLE 3: • BLOCK MAP PATTERN statements Generating Pattern Sequences pattern1 v=s c=red r=12; pattern2 v=ms c=green; – • specifying that all blocks are red (12 provinces) and that the map areas are green. Options used on the BLOCK statement – – – – – Twelve different levels are requested (one per province). The shape and size of the blocks are changed. Just as was done with the PRISM map, the viewing angle is changed. The block height, not color, displays population information. The legend is suppressed (NOLEGEND). By default, the map areas are outlined in their own color (in this example, green) so the COUTLINE option is used to specify a color for provincial boundaries. Creating Maps with SAS/GRAPH EXAMPLE 3: BLOCK MAP NOTICE • LEVELS OPTION + PATTERN STATEMENTS • CHANGE VIEWING ANGLE • CHANGE BLOCK SHAPE AND SIZE Creating Maps with SAS/GRAPH EXAMPLE 4 SURFACE MAP Creates three-dimensional surface maps in which levels of magnitude of the specified response variables are represented by spikes of varying height. Creating Maps with SAS/GRAPH EXAMPLE 4 SURFACE MAP *** reset all graphics options to default values; goptions reset=all; *** create a surface map with a title and footnote; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX04.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; surface pop_2001; run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 4 SURFACE MAP *** reset all graphics options to default values; goptions reset=all; *** create a surface map with a title and footnote; title 'CANADIAN POPULATION BY PROVINCE, 2001'; footnote j=r 'EX04.SAS '; proc gmap data=canada_pop map=maps.canada2; id province; surface pop_2001 / rotate=80 tilt=45 nlines=100 constant=30 cbody=red; run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH EXAMPLE 4 SURFACE MAP Using a spike at the center of each map area displays map data. The height of the spike shows relative values of population. The map is intended to show a gradient in population rather than exact values. • ROTATION , TILT options rotate the map about the z-axis and x-axis respectively (the default is 70 degrees for both options). • NLINES option controls the number of lines used on the map surface (default 50, range 50-100). • CONSTANT controls the appearance of the spikes (both width and height). By default, constant=10...Values greater than 10 yield spikes that are wider at the base. Values less than 10 yield spikes that are narrower at the base... • CBODY specifies the color that is used to draw the surface map. Creating Maps with SAS/GRAPH EXAMPLE 4 SURFACE MAP NOTICE • NO LEGEND • EFFECT OF VARIOUS OPTIONS • LIMITED USE OF COLOR (CBODY OPTION) Creating Maps with SAS/GRAPH SAS-SUPPLIED MAP DATA SETS As stated earlier, SAS/GRAPH provides map data sets that allow one to create one or more maps of nearly every country in the world. At a minimum, a map data set contains three variables: • X and Y (both numeric) that contain the coordinates of map areas (commonly, but not necessarily longitude and latitude); • ID a variable that contains a value for the geographic area associated with each pair of X-Y variables. Creating Maps with SAS/GRAPH SAS-SUPPLIED MAP DATA SETS Two other variables that may be present: • SEGMENT is used by the GMAP procedure to draw map areas that may comprise more than one polygon. • DENSITY can be used to reduce the number of X-Y coordinates used to draw map boundaries when less detailed maps are permissible. Creating Maps with SAS/GRAPH SAS-SUPPLIED MAP DATA SETS • SPECIAL DATA SET (METAMAPS) a data set with information about maps in the SAS library. *** display a list of maps in the MAPS library for Canada***; proc print data=maps.metamaps label; var country memname; where memtype eq 'DATA' and type eq 'GRAPH' and country = 'CANADA'; run; Creating Maps with SAS/GRAPH SAS-SUPPLIED MAP DATA SETS • SPECIAL DATA SET (METAMAPS) Name of Country CANADA CANADA CANADA CANADA CANADA Library Member Name CANADA CANADA2 CANADA3 CANADA4 CANCENS Creating Maps with SAS/GRAPH SAS-SUPPLIED MAP DATA SETS • Four map data sets for Canada: CANADA, CANADA2 draw maps of census districts within Canadian provinces. CANADA3, CANADA4 draw maps of Canadian provinces • The data set CANCENS contains information about map areas: – province numbers and names – region numbers and names CREATE MAPS FROM SHAPEFILES (V9) version 9 has a new procedure, PROC MAPIMPORT, that allows one to convert shapefiles to map data sets. Creating Maps with SAS/GRAPH PROJECTED AND UNPROJECTED MAP DATA SETS Contents of CANADA2 and CANADA4 Map Data Sets *******CANADA2 - 4,302 observations # Variable Type Len 1 PROVINCE Char 2 2 SEGMENT Num 5 3 X Num 6 4 Y Num 6 Label Province Abbreviation Province Segment Number X Coordinate Y Coordinate ******* CANADA4 - 31,311 observations # Variable Type Len 2 DENSITY Num 5 1 PROVINCE Char 2 3 SEGMENT Num 5 4 X Num 6 5 Y Num 6 Label Density for Lower Resolution Maps Province Abbreviation Province Segment Number Unprojected Longitude in Radians Unprojected Latitude in Radians There are two differences: CANADA4 contains over seven times the number of X-Y coordinates as CANADA2; CANADA4 coordinates are unprojected. Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH PROJECTED AND UNPROJECTED MAP DATA SETS There are several notable differences between the output of two maps: • the map is backwards; • the shape is distorted; • there is much more detail in the map boundaries. Another SAS/GRAPH procedure must be used prior to PROC GMAP to project the unprojected map coordinates. *** project the CANADA4 map data set; proc gproject data=maps.canada4 out=c4_projected; id province; run; Creating Maps with SAS/GRAPH PROJECTED AND UNPROJECTED MAP DATA SETS NOTICE • VARIABLES (LABELS) • NUMBER OF OBSERVATIONS Creating Maps with SAS/GRAPH User-Defined COLORS AND GRAY SCALES IN CHOROPLETH MAPS • PATTERN STATEMENT USER-DEFINED COLOR SCHEME http://www.colorbrewer.com *** choose a set of colors - sequentially increasing shades of blue; pattern1 v=ms c=cxeff3ff; pattern2 v=ms c=cxbdd7e7; pattern3 v=ms c=cx6baed6; pattern4 v=ms c=cx2171b5; • LEGEND STATEMENT *** specify parameters for the legend; legend1origin=(75,60)pct across=1 mode=share label=(position=top j=c 'POPULATION PER' j=c 'SQUARE KILOMETER') shape=bar(3,4)pct cborder=blue; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH Create an Outline Map of British Columbia with Census Districts When a map showing only map boundaries (no data) is needed. • USE MAP DATA SET AS RESPONSE DATA SET (ALL OPTION) • USE UNPROJECTED MAP DATA SETS (Canada3) • Only one observation need be used for the response data set. Creating Maps with SAS/GRAPH Create an Outline Map of British Columbia with Census Districts *** reset all graphics options to default values; goptions reset=all; proc gproject data=maps.canada3 out=BC; where province eq '59'; id cdcode; run; pattern v=me; title 'BRITISH COLUMBIA REGIONS'; footnote j=r 'EX14.SAS '; proc gmap data=BC (obs=1) map=BC all; id cdcode; choro cdcode / nolegend; run; quit; title; footnote; Creating Maps with SAS/GRAPH Creating Maps with SAS/GRAPH ALTERNATIVE OUTPUT DESTINATIONS The file can easily be posted on the web or incorporated into other programs (e.g. PowerPoint). • GIF (FILENAME STATEMENT) goptions reset=all device=gif /* select the GIF device driver*/ gsfname=mapout /* specify a FILEREF for the GIF file */ ftext='Arial/bo‘ /* select a font */ xpixels=800 /* map size */ ypixels=600 /* map size */; filename mapout ‘C:\My sas maps\map1.gif'; • PDF (ODS) goptions reset=all ftext='Helvetica/bo‘ rotate=landscape; ods pdf file= ‘C:\my sas maps\map1.gif ' notoc; ...... ods pdf close; Creating Maps with SAS/GRAPH NEW FEATURES allow for the creation of maps with dynamic features: • Drill Downs map areas can be hyperlinked to additional information; • Pop-Ups additional information can be provided to map users when a mouse cursor passes over a map area; • Animation a time dimension can be added using animation. (many gif files, layered into one file)