RDX2 X  stateMicromap source function(  stateframe,  panelDesc, & rowNames=c("ab","fips","full")[1],  sortVar=NULL,  ascend=T,  title=c("",""), plotNames=c("ab","full")[2], " colors=rlStateDefaults$colors, % details= rlStateDefaults$details) { # stateframe data.frame H# rownames must be state abbreviations, names, or fips codes (# panelDesc data.frame # Example %# panelDesc = data.frame( 8# type=c('map','id','dotconf','dotconf'), =# lab1=c('','','White Males','White Females'), C# lab2=c('','','Rate and 95% CI','Rate and 95% CI'), I# lab3=c('','','Deaths per 100,000','Deaths per 100,000'), $# col1=c(NA,NA,2,9), $# col2=c(NA,NA,4,11), $# col3=c(NA,NA,5,12), 2# refval=c(NA,NA,NA,wflungbUS[,1]), '# boxplot=c('','','','') B# style=c('tails',NA,NA,NA) ## size = c(2,1,3,3)) L# The first description row describes the first column of panels I# an so on. This is a candidate for change since each column B# describing a column avoids a mental transposition. # 0# type refers the panel type, valid types are "# "map", "mapTail","mapMedian", # "id", )# "dot", "dotse","dotconf", )# "bar", "arrow", "boxplot" # -# For non-highlighted contours 5# map accumulates states top to bottom 6# maptail accumulates states outside in T# mapMedian feature above median state above the median and vis versa # I# bar will accept negative values and plot from 0 in that direction. # # col1,col2, col3 &# numbers of stateframe used as data $# Dot and bar plots require column 1 2# Dotse and arrow dots require columns 1 and 2 5# dotse needs estimates and standard errors 4# arrows needs beginning and ending values # # Dotconf requires 3 columns -# estimate, lower and upper bounds # lab1, lab2 =# Two label lines at the top of columns. Use "" for blank # lab3 4# One label line at the bottom of a each column, !# typically measurement units # refValues 9# name of objects providing a reference values shown 4# as a line down the column # boxplot 6# names list object with a boxplot for each state 2# states much be label by their abbreviation. # 8# Note: Some descriptors may be omitted if none of the # panel plots need them. A# often refValues and boxplots can be omitted # <# rowNames type of state id used as row.names in stateframe ,# default is "ab" for abbreviation # *# plotNames state label use in in the plot $# default is the full name # 8# sortVar a column subscript of stateframe to specific &# the variable used in sorting. use 8# (can be a vector of column subscripts to break ties) # :# title A vector with one or two character strings to '# use the title. The spacing # # -# ascend T default sorts in ascending order # 2# colors a color palette as a vectors of strings 2# 5 colors for states in a group of 5 +# 1 color for the median state G# 1 foreground color for non-highlighted states in the map # 2# details spacing, line widths and other details #see rlStateDef$details # +# legenddefault F allocates not extra space '# T allocates .5 inches 2# the height to allocate in inches 3# (function for adding legends) <#______________________Argument Checks______________________ # Check data format Iif(!is.data.frame(stateframe))stop("First argument must be a data.frame") nr = nrow(stateframe) Aif(nr!=51)stop("Currently 51 rows (states plus DC) are required") # Check panel description format if(!is.data.frame(panelDesc)) -stop("Panel descriptor must be a data.frame") ## Check for panelDesc$type validity Kvalid = c("map","maptail","mapmedian","id","arrow","dot","dotse","dotconf", L "bar","boxplot") # idDot and rank are not currently implemented #type = as.character(panelDesc$type) subs = match(type,valid) if(any(is.na(subs))) 4stop(paste("Invalid panel type:",type[is.na(subs)])) ncol = nrow(panelDesc) blank = rep('',ncol) ,if(is.null(panelDesc$lab1))lab1 = blank else ; lab1 = as.character(panelDesc$lab1) ,if(is.null(panelDesc$lab2))lab2 = blank else ; lab2 = as.character(panelDesc$lab2) ,if(is.null(panelDesc$lab3))lab3 = blank else ; lab3 = as.character(panelDesc$lab3) # Column width defaults if(is.null(panelDesc$colsize)){ colSize = rep(0,length(type)) # loc = substring(type,1,3)=='map' . if(any(loc))colSize[loc] = details$mapWidth  loc = type=='id'  if(any(loc)){ ( sub = ifelse(plotNames=="full",1,2) ( colSize[loc] = details$idWidth[sub]  }  plotWidth = par("pin")[1] 7 equalWidth= (plotWidth-sum(colSize))/sum(colSize==0) 2 colSize = ifelse(colSize==0,equalWidth,colSize) } -assign('lab1',lab1,pos=sys.frame(which = -1)) -assign('lab2',lab2,pos=sys.frame(which = -1)) -assign('lab3',lab3,pos=sys.frame(which = -1)) %# Save panelDesc for function use Set if(!is.null(panelDesc$col1)) 7assign("col1",panelDesc$col1,pos=sys.frame(which = -1)) if(!is.null(panelDesc$col2)) 7assign("col2",panelDesc$col2,pos=sys.frame(which = -1)) if(!is.null(panelDesc$col3)) 7assign("col3",panelDesc$col3,pos=sys.frame(which = -1)) if(is.null(panelDesc$refval)) K assign('refVals',rep(NA,nrow(panelDesc)),pos=sys.frame(which = -1)) else ? assign('refVals',panelDesc$refval,pos=sys.frame(which = -1))  +# check to see if columns are available for +# the type of plot and values are plausible \if(!is.null(panelDesc$boxlist))assign('boxlist',panelDesc$boxlist,pos=sys.frame(which = -1)) (# Get state abbreviation as polygon link 'fullNames = row.names(rlStateNamesFips) curnam = row.names(stateframe) stateId = switch(rowNames,  "ab"= curnam, ; "fips"= rlStateNamesFips$ab[match(as.integer(curnam), : rlStateNamesFips$fips)], ; "full"= rlStateNamesFips$ab[match(curnam,fullNames)], " stop("check rownames type")  ) @# Get statenames or abbreviations to plot_______________________ stateNames = switch(plotNames,  "ab"=stateId, E "full"= fullNames[match(stateId,rlStateNamesFips$ab)], + stop("check plotNames type") ) @# sort and store stateframe, stateid, and stateNames____________ -if(is.null(sortVar) || is.character(sortVar))  ord = order(stateNames) else # ord = order(stateframe[,sortVar]) if(!ascend)ord = rev(ord) :assign("dat",stateframe[ord,],pos=sys.frame(which = -1)) 8assign("stateId",stateId[ord],pos=sys.frame(which = -1)) >assign("stateNames",stateNames[ord],pos=sys.frame(which = -1)) @# ________________Detail defaults_______________________________ 1assign("colors",colors,pos=sys.frame(which = -1)) nam = names(details) for (i in 1:length(details)){ 8 assign(nam[i],details[[i]],pos=sys.frame(which = -1)) } 1dy = details[["dy"]] # for debugging 9cexTitle = details[["cexTitle"]] # Used in this function "# __________________________layout topMar = details[["topMar"]] botMar = details[["botMar"]] legfactor=1 if(!is.null(panelDesc$refval)){ % if(any(!is.na(panelDesc$refval))){ * botMar = details[["botMarLegend"]] 5 # revisit calculation below to be more precise / legfactor= 9/(9-details[['botMardif']]) } } 3assign('legfactor',legfactor,sys.frame(which = -1)) ncol=length(type) colSep = c(0,rep(.1,ncol-1),0) .assign("panels",panelLayout(nrow=11,ncol=ncol, , topMar=topMar,leftMar=0,bottomMar=botMar, $ rowSep=details[["rowSep"]], & rowSize=details[["rowSize"]],  colSize=colSize, 2 colSep=colSep),pos=sys.frame(which = -1)) -grounpedRowSize = details[["groupedRowSize"]] +groupedRowSep = details[["groupedRowSep"]] 1assign("panelGroup",panelLayout(nrow=3,ncol=ncol, - topMar=topMar,leftMar=0,bottomMar=botMar, ! rowSize=groupedRowSize,  rowSep=groupedRowSep,  colSize=colSize, 3 colSep=colSep),pos=sys.frame(which = -1)) ,assign("panelOne",panelLayout(nrow=3,ncol=1, - topMar=topMar,leftMar=0,bottomMar=botMar, ! rowSize=groupedRowSize, : rowSep=groupedRowSep),pos=sys.frame(which = -1)) =# ____________________Main loop______________________________ for (j in 1:ncol){ switch(type[j],  "map"=rlStateMap(j), ! "maptail"=rlStateMapTail(j), + "mapmedian"=rlStateMapMedian(j),  "id"=rlStateId(j),  "dot"=rlStateDot(j),  "dotse"=rlStateDotSe(j), ! "dotconf"=rlStateDotConf(j),  "arrow"=rlStateArrow(j),  "bar"=rlStateBar(j), D "boxplot"=rlStateBoxplot(j,as.character(panelDesc$boxplot[j])),  "nomatch" ) } "panelSelect(panelOne,margin="top") panelScale() if(length(title)==1){ text(.5,.77,title,cex=cexTitle) } else { !text(.5,.9,title[1],cex=cexTitle) "text(.5,.65,title[2],cex=cexTitle) } } stateframe panelDesc rowNames [ c ab fips full?$ sortVar ascend T$ title   plotNames ab full@ colors $ rlStateDefaults colors details details { if ! is.data.frame stop #First argument must be a data.frame = nr nrow !=@I /Currently 51 rows (states plus DC) are required %Panel descriptor must be a data.frame valid map maptail mapmedian id arrow dot dotse dotconf bar boxplot type as.character type subs match any is.na paste Invalid panel type:  ncol blank rep " is.null lab1 lab1#& lab1% lab2 lab2#' lab2% lab3 lab3#( lab3% colsize colSize$ length loc == substring?@ map+)+ mapWidth+, id+ sub ifelse,  full?@)+ idWidth. plotWidth par pin? equalWidth / ( -0 sum)6,))/,)2) assign lab1& pos sys.frame which5?7 lab2'89:5?7 lab3(89:5?% col17 col1 col189:5?% col27 col2 col289:5?% col37 col3 col389:5?% refval7 refVals$ 89:5?7 refVals refval89:5?% boxlist7 boxlist boxlist89:5? fullNames row.names rlStateNamesFips curnam= stateId switch ab? fips>B as.integer?>C full>B?< check rownames type stateNamesA B@E<@> ab check plotNames type ||% is.character ord orderFIJ I revI7 datI89:5?7 stateId@I89:5?7 stateNamesFI89:5?7 colors 89:5? nam names for i :?*7LO [[O89:5? dyQ dy cexTitleQ cexTitle topMarQ topMar botMarQ botMar legfactor?% refval  refvalUQ botMarLegendV3@"45@"Q botMardif7 legfactorV9:5?"* colSep$?5"?7 panels panelLayout@&""TT leftMar bottomMarU rowSepQ rowSep rowSizeQ rowSize))WW89:5? grounpedRowSizeQ groupedRowSize groupedRowSepQ groupedRowSep7 panelGroupX@""TTYZU\ groupedRowSize[^))WW89:5?7 panelOneX@"?TTYZU\_[^89:5?N jP?"A` map rlStateMap` maptail rlStateMapTail` mapmedian rlStateMapMedian` id rlStateId` dot rlStateDot` dotse rlStateDotSe` dotconf rlStateDotConf` arrow rlStateArrow` bar rlStateBar` boxplot rlStateBoxplot` boxplot` nomatch panelSelect panelOne margin top panelScale,* ? text?? =p  cexSy?? ?zSy?? @zSp? function(j){ x1 = dat[,col1[j]] x2 = dat[,col2[j]] refval = refVals[j] good = !is.na(x1+x2) rx = range(x1,x2,na.rm=T) #rx = sc*diff(rx)*c(-.5,.5)+mean(rx) ry = c(0,1) .# ____________labeling and axes_______________ panelSelect(panels,1,j) panelScale(rx,ry) ,mtext(lab1[j],side=3,line=line1,cex=cexText) ,mtext(lab2[j],side=3,line=line2,cex=cexText) /axis(side=3,mgp=mgpTop,tick=F,cex.axis=cexText) panelSelect(panels,ng,j) panelScale(rx,ry) 3# padj in axis needed to make grid line label close Aaxis(side=1,mgp=mgpBottom,padj=padjBottom,tck=0,cex.axis=cexText) -mtext(side=1,lab3[j],line=line3,cex=cexText) 0#_________________drawing loop__________________ for (i in 1:ng){  gsubs = ib[i]:ie[i]  ke = length(gsubs)  laby = ke:1  pen = if(i==6)6 else 1:ke  panelSelect(panels,i,j) ! panelScale(rx,c(1-pad,ke+pad))  panelFill(col=colBackgr) C axis(side=1,tck=1,labels=F,col=colGrid,lwd=lwdGrid) # grid lines C if(!is.na(refval))lines(rep(refval,2),c(1-padMinus,ke+padMinus), 4 lty=ltyRefVal,lwd=lwdRefVal,col=colRefVal)  panelOutline(col=colOutline)  oldpar = par(lend="butt")  for (k in 1:ke){  m = gsubs[k]  if(good[m]){ ] arrows(x1[m],laby[k],x2[m],laby[k],col=colors[pen[k]],length=lengthArrow,lwd=lwdArrow) $# points(x1[m],laby[k],pch=pch, (# cex=cexDot,col=colors[pen[k]]) "# points(x1[m],laby[k],pch=1, &# cex=cexDot,col=colDotOutline) }  }  par(oldpar) } ># ____________________________PanelOutline____________________ for (i in 1:3){  panelSelect(panelGroup,i,j)  panelScale()  panelOutline() } )if(!is.na(refval))rlStateRefVal(j,refval) }` x1 dat col1` x2| col2` refval refVals` good  +{~ rx range{~ na.rm  * sc diff5?? mean ry?u panels?`x mtext&` side@ line line1z cexText'`@ line2z axis@ mgp mgpTop tick F cex.axisu ng`x? mgpBottom padj padjBottom tck?(` line3zNOP? gsubsP ibO ieO ke* labyP? pen,O@@P?uO`x5? pad panelFill col colBackgr?? labels colGrid lwd lwdGrid  lines$@5? padMinus lty ltyRefVal lwdRefVal colRefVal panelOutline colOutline oldpar1 lend buttN kP? m arrows{~ * lengthArrow lwdArrow1NOP?@u panelGroupO`x  rlStateRefVal`rJ function(j){ py = barht*c(-.5,-.5,.5,.5,NA) ry = c(0,1) refval = refVals[j] .# ________scale x axis________________________ x = dat[,col1[j]] rx = range(x,na.rm=T) if(rx[2]<=0){ rx[2]= 0  rx[1] = mean(1,sc)*rx[1] } else if (rx[1] >=0 ) { rx[1]= 0  rx[2] = rx[2]*(1+sc)/2 } else { #rx = sc*diff(rx)*c(-.5,.5)+mean(rx) } good = !is.na(x) '# ____________label axes_______________ panelSelect(panels,1,j) panelScale(rx,ry) ,mtext(lab1[j],side=3,line=line1,cex=cexText) ,mtext(lab2[j],side=3,line=line2,cex=cexText) /axis(side=3,mgp=mgpTop,tick=F,cex.axis=cexText) panelSelect(panels,ng,j) panelScale(rx,ry) 3# padj in axis needed to make grid line label close Baxis(side=1,mgp=mgpBottom,padj=padjBottom,tick=F,cex.axis=cexText) -mtext(side=1,lab3[j],line=line3,cex=cexText) 0# _______________drawing loop___________________ for (i in 1:ng){  gsubs = ib[i]:ie[i]  ke = length(gsubs)  pen = if(i==6)6 else 1:ke  laby = ke:1  panelSelect(panels,i,j) ! panelScale(rx,c(1-pad,ke+pad))  panelFill(col=colFill) > axis(side=1,tck=1,labels=F,col=colGrid,lwd=lwdGrid) # grids  if(!is.na(refval)) 3 lines(rep(refval,2),c(1-padMinus,ke+padMinus), 4 lty=ltyRefVal,lwd=lwdRefVal,col=colRefVal) panelOutline(col=colOutline)  for (k in 1:ke){  m = gsubs[k] val = x[m]  if(good[m]){ E polygon(c(0,val,val,0,NA),rep(laby[k],5)+py,col=colors[pen[k]]) N polygon(c(0,val,val,0,NA),rep(laby[k],5)+py,col=colBarOutline,density=0)  } B lines(c(0,0),c(1-.5*barht,ke+.5*barht),col=1) # bar base line  } } ># ____________________________PanelOutline____________________ for (i in 1:3){  panelSelect(panelGroup,i,j)  panelScale()  panelOutline() } # _______Reference Value Legend )if(!is.na(refval))rlStateRefVal(j,refval) }` py barht5?5??? ?` x|}`  <=@@??? >=??@3@4?@5?? u?`x&`@z'`@z@u`x??(`zNOP?POO*,O@@P?P?uO`x5? colFill?? $@5?NP? val polygon $@  $@ colBarOutline density5????NOP?@uO`x `t{ function(j,boxnam){ boxlist = get(boxnam,pos=1) refval = refVals[j] # y boxplot scaling py = c(-.5,-.5,.5,.5) thiny = thinBox*py thicky = thickBox*py medy = medianLine*c(-.5,.5) 0ry = c(0,1) # used in y scaling for grid lines A#_______________Gather stats and put in State Order______________ # For the moment match on names stats = boxlist$stats 5thin = stats[c(1,5,5,1),] # a column for each state 5thick = stats[c(2,4,4,2),] # a column for each state ;med = stats[3,] # a single value for each state nam = boxlist$names # conf = boxlist$conf outlier = rep(F,length(med)) if(!is.null(boxlist$out)){  out = boxlist$out  group = boxlist$group  outlier[unique(group)] = T } # Need to put in order ord = match(stateId,nam) # what about missing values # if NA do not plot on that line $# What about name type inconsistency /# I will require use of state name abbreviation # Fips codes be useful 7# split() based on first two digits of county fips 8# I could stash state fips in stateframe sorted order # Boxplot median sorting .# Currently the user would need to sort the *# medians in the state frame making sure # the row.names were correct. # # boxlist$stats[3,]  )# ___________ scale x axis_______________ 'if(is.null(out)) rx = range(stats) else # rx = range(stats,out) #rx = sc*diff(rx)*c(-.5,.5)+mean(rx) dx = diff(rx)/200 px= c(-dx,-dx,dx,dx) *# ____________labeling axes_______________ panelSelect(panels,1,j) panelScale(rx,ry) ,mtext(lab1[j],side=3,line=line1,cex=cexText) ,mtext(lab2[j],side=3,line=line2,cex=cexText) /axis(side=3,mgp=mgpTop,tick=F,cex.axis=cexText) panelSelect(panels,ng,j) panelScale(rx,ry) 3# padj in axis needed to make grid line label close Baxis(side=1,mgp=mgpBottom,padj=padjBottom,tick=F,cex.axis=cexText) -mtext(side=1,lab3[j],line=line3,cex=cexText) 0# _______________drawing loop___________________ oldpar = par(lend="butt") for (i in 1:ng){ gsubs = ib[i]:ie[i]  ke = length(gsubs)  pen = if(i==6)6 else 1:ke  laby = ke:1  panelSelect(panels,i,j) ! panelScale(rx,c(1-pad,ke+pad))  panelFill(col=colFill) C axis(side=1,tck=1,labels=F,col=colGrid,lwd=lwdGrid) # grid lines  if(!is.na(refval)) 3 lines(rep(refval,2),c(1-padMinus,ke+padMinus), 4 lty=ltyRefVal,lwd=lwdRefVal,col=colRefVal)  panelOutline(col=colOutline)  for (k in 1:ke){ > m = ord[gsubs[k]] #m is the location of the state in boxlist  if(is.na(m))next ! kp = pen[k] # color number  ht = laby[k]  if(outlier[m]){  vals = out[group==m] * points(vals,rep(ht,length(vals)),pch=1, > col=ifelse(useBlack,"black",colors[kp]), 4 cex=cexOutlier,lwd=lwdOutlier) } A polygon(thin[,m],rep(ht,4)+ thiny,col=colors[kp],border=NA) D# polygon(thin[,m],rep(ht,4)+ thiny,col=colBoxOutline,density=0) C polygon(thick[,m],rep(ht,4)+ thicky,col=colors[kp],border=NA) F# polygon(thick[,m],rep(ht,4)+ thicky,col=colBoxOutline,density=0) E# points(med[m],ht,col=colDotMedian,pch=pchMedian,cex=cexMedian) 8# points(med[m],ht,col="black",pch=1,cex=cexMedian) :# polygon(med[m]+px,ht+medianLine*dy,lwd=1,density=0) # Lines looked crooked 3 segments(med[m],ht+medy[1],med[m],ht+medy[2], + col=colMedian,lwd=lwdMedian) ?# lines(rep(med[m],2),ht+medy,col=colMedian,lwd=lwdMedian)  } } par(oldpar) ># ____________________________PanelOutline____________________ for (i in 1:3){  panelSelect(panelGroup,i,j)  panelScale()  panelOutline() } )if(!is.na(refval))rlStateRefVal(j,refval) }` boxnam; get8?`5?5??? thiny thinBox thicky thickBox medy medianLine5??? stats; thin?@@? thick@@@@ med@L;M outlier$*%; out; group; unique I@L%5?? dx3@i px55u?`x&`@z'`@z@u`x??(`z1 buttNOP?POO*,O@@P?P?uO`x5??? $@5?NP?I  next kp ht vals, points$* pch?/ useBlack black z cexOutlier lwdOutlier$@  border $@   segments?@ colMedian lwdMedian1NOP?@uO`x ` #FF2626 #E68C00 #00A600 #3380FF #8033B3 #000000 #FFFFCCM red orange green greenish blue purple black light yellowI@@& ?@@&@0@5@:@;@@@B@E@G @@$@.@4@9@:@?@B@D@G@I?ffffff??? ?? @@@@@?@@@@@@A?@A????ffffff?333333?GzH?p =q?\(?(\)???ffffff\(?ə #CCCCCCM light gray #FFFFFFM white?@?@ffffff@@ #008000M mid green black?zG{@?UUUUUU #808080M mid gray?333333?333333 ?(\) white@3?ffffff@ white?陙@ #CCCCCCM light gray@0?GzH@W #000000M black?@ #FFFFFFM white black #000000M black?zG{????zG{???ᙙ?333333?zG{ #000000M black #4D4D4DM dark gray #4D4D4DM dark gray black #CCCCCCM light grayMI ne ng ib ie topMar botMar botMarLegend botMardif rowSep rowSize groupedRowSize groupedRowSep mapWidth idWidth sc pad padex padMinus line1 line2 line3 line4 lineTiclab colFill colGrid lwdGrid mgpTop mgpBottom padjBottom ltyRefVal lwdRefVal colRefVal colOutline lengthArrow lwdArrow barht colBarOutline thinBox thickBox useBlack medianLine colDotMedian pchMedian cexMedian lwdMedian colMedian cexOutlier lwdOutlier colBoxOutline pch cexDot conf colDotOutline lwdDotOutline lwdConf colLineBackgr colLineForegr colLineNation cexState lwdBackGr lwdForeGr lwdNation cexText cexTitle cexDotId cexConf cexOut cexArrow colArrow colIdOutline colMedian colRef colBackgrM colors detailsj> function(j){ x = dat[,col1[j]] good = !is.na(x) refval = refVals[j] ry = c(0,1) /#____________scale x axis______________________ rx = range(x1,na.rm=T) #rx = sc*diff(rx)*c(-.5,.5)+mean(rx) *# ____________labeling axes_______________ panelSelect(panels,1,j) panelScale(rx,ry) ,mtext(lab1[j],side=3,line=line1,cex=cexText) ,mtext(lab2[j],side=3,line=line2,cex=cexText) /axis(side=3,mgp=mgpTop,tick=F,cex.axis=cexText) panelSelect(panels,ng,j) panelScale(rx,ry) 3# padj in axis needed to make grid line label close Baxis(side=1,mgp=mgpBottom,padj=padjBottom,tick=F,cex.axis=cexText) -mtext(side=1,lab3[j],line=line3,cex=cexText) 0# _______________drawing loop___________________ for (i in 1:ng){  gsubs = ib[i]:ie[i]  ke = length(gsubs)  pen = if(i==6)6 else 1:ke  laby = ke:1  panelSelect(panels,i,j) ! panelScale(rx,c(1-pad,ke+pad))  panelFill(col=colFill) = axis(side=1,tck=1,labels=F,col=colGrid,lwd=lwdGrid) # grid if(!is.na(refval)) 8 lines(rep(refval,2),c(1-padMinus,ke+padMinus), 8 lty=ltyRefVal,lwd=lwdRefVal,col=colRefVal) panelOutline(colOutline)  for (k in 1:ke){  m=gsubs[k]  if(good[m]){ C points(x[m],laby[k],pch=pch,cex=cexDot,col=colors[pen[k]]) I points(x[m],laby[k],pch=1,cex=cexDot,col=colDotOutline)  } ?# points(x[gsubs],laby,pch=pch,cex=cexDot,col=colors[pen]) ?# points(x[gsubs],laby,pch=1,cex=cexDot,col=colDotOutline, !# lwd=lwdDotOutline)  } } ># ____________________________PanelOutline____________________ for (i in 1:3){  panelSelect(panelGroup,i,j)  panelScale()  panelOutline() } )if(!is.na(refval))rlStateRefVal(j,refval) }`|}` `?{ 5??u?`x&`@z'`@z@u`x??(`zNOP?POO*,O@@P?P?uO`x5??? $@5?NP?z cexDot ?z colDotOutlineNOP?@uO`x `nI function(j){ x = dat[,col1[j]] lower = dat[,col2[j]] upper = dat[,col3[j]] good1 = !is.na(x) good2 = !is.na(upper+lower) @if(!all(good2))warning("Missing Value in Confidence Intervals") refval = refVals[j] ry = c(0,1) .#_________________scale x axis________________ !rx = range(upper,lower,x,na.rm=T) #rx = sc*diff(rx)*c(-.5,.5)+mean(rx) *# ____________labeling axes_______________ panelSelect(panels,1,j) panelScale(rx,ry) ,mtext(lab1[j],side=3,line=line1,cex=cexText) ,mtext(lab2[j],side=3,line=line2,cex=cexText) /axis(side=3,mgp=mgpTop,tick=F,cex.axis=cexText) panelSelect(panels,ng,j) panelScale(rx,ry) 3# padj in axis needed to make grid line label close Baxis(side=1,mgp=mgpBottom,padj=padjBottom,tick=F,cex.axis=cexText) -mtext(side=1,lab3[j],line=line3,cex=cexText) 0# _______________drawing loop___________________ for (i in 1:ng){  gsubs = ib[i]:ie[i]  ke = length(gsubs)  pen = if(i==6)6 else 1:ke  laby = ke:1  panelSelect(panels,i,j) ! panelScale(rx,c(1-pad,ke+pad))  panelFill(col=colFill) 6 axis(side=1,tck=1,labels=F,col=colGrid,lwd=lwdGrid)  if(!is.na(refval)) 4 lines(rep(refval,2),c(1-padMinus,ke+padMinus), 4 lty=ltyRefVal,lwd=lwdRefVal,col=colRefVal)  panelOutline(col=colOutline)  for (k in 1:ke){ m = gsubs[k]  if(good2[m]){ - lines(c(lower[m],upper[m]),rep(laby[k],2), % col=colors[pen[k]],lwd=lwdConf)  } if(good1[m]){ C points(x[m],laby[k],pch=pch,cex=cexDot,col=colors[pen[k]]) A points(x[m],laby[k],pch=1,cex=cexDot,col=colDotOutline) }  } L# segments(lower[gsubs],laby,upper[gsubs],laby,col=color[pen],lwd=lwdConf) <# points(x[gsubs],laby,pch=pch,cex=dotCex,col=colors[pen]) <# points(x[gsubs],laby,pch=1,cex=cexDot,col=colDotOutline, # lwd=lwdDotOutline) } ># ____________________________PanelOutline____________________ for (i in 1:3){  panelSelect(panelGroup,i,j)  panelScale()  panelOutline() } )if(!is.na(refval))rlStateRefVal(j,refval) }`|}` lower|` upper| col3` good1  good2  all warning %Missing Value in Confidence Intervals`? 5??u?`x&`@z'`@z@u`x??(`zNOP?POO*,O@@P?P?uO`x5??? $@5?NP?$@  lwdConfz ?zNOP?@uO`x `lE function(j){ x = dat[,col1[j]] zval = qnorm(.5+conf/200) inc = zval*dat[,col2[j]] upper = x+inc lower = x-inc good1 = !is.na(x) good2 = !is.na(upper) >if(any(is.na(inc)))warning("Missing Value in Standard Errors") refval = refVals[j] ry=c(0,1) .#_______________scale x axis__________________ "rx = range(upper,lower,x1,na.rm=T) #rx = sc*diff(rx)*c(-.5,.5)+mean(rx) *# ____________labeling axes_______________ panelSelect(panels,1,j) panelScale(rx,ry) ,mtext(lab1[j],side=3,line=line1,cex=cexText) ,mtext(lab2[j],side=3,line=line2,cex=cexText) /axis(side=3,mgp=mgpTop,tick=F,cex.axis=cexText) panelSelect(panels,ng,j) panelScale(rx,ry) 3# padj in axis needed to make grid line label close Baxis(side=1,mgp=mgpBottom,padj=padjBottom,tick=F,cex.axis=cexText) -mtext(side=1,lab3[j],line=line3,cex=cexText) /#__________________drawing loop________________ for (i in 1:ng){  gsubs = ib[i]:ie[i]  ke = length(gsubs)  pen = if(i==6)6 else 1:ke  laby = ke:1  panelSelect(panels,i,j) ! panelScale(rx,c(1-pad,ke+pad))  panelFill(col=colFill) = axis(side=1,tck=1,labels=F,col=colGrid,lwd=lwdGrid) # grid  if(!is.na(refval)) 4 lines(rep(refval,2),c(1-padMinus,ke+padMinus), 3 lty=ltyRefVal,lwd=lwdRefVal,col=colRefVal)  panelOutline(colOutline)  for (k in 1:ke){ m = gsubs[k]  if(good2[m]){ - lines(c(lower[m],upper[m]),rep(laby[k],2), % col=colors[pen[k]],lwd=lwdConf)  } if(good1[m]){ C points(x[m],laby[k],pch=pch,cex=cexDot,col=colors[pen[k]]) A points(x[m],laby[k],pch=1,cex=cexDot,col=colDotOutline) }  } } ># ____________________________PanelOutline____________________ for (i in 1:3){  panelSelect(panelGroup,i,j)  panelScale()  panelOutline() } )if(!is.na(refval))rlStateRefVal(j,refval) }`|}` zval qnorm?3 conf@i inc|`5    Missing Value in Standard Errors`?{ 5??u?`x&`@z'`@z@u`x??(`zNOP?POO*,O@@P?P?uO`x5??? $@5?NP?$@ z ?zNOP?@uO`x `h function(j){ py = barht*c(-.5,-.5,.5,.5,NA) px = c(.04,.095,.095,.04,NA) idstart = .137 dotstat = .0675 6rx = c(0,diff(panels$coltabs[j+1,])) # width in inches ry = c(0,1) 0#______________________panel labels_____________ panelSelect(panels,1,j) panelScale(rx,ry) +mtext('U.S.',side=3,line=line1,cex=cexText) .mtext('States',side=3,line=line2,cex=cexText) for (i in 1:ng){  gsubs = ib[i]:ie[i]  ke = length(gsubs)  laby = ke:1  pen = if(i==6)6 else 1:ke  panelSelect(panels,i,j)  npad = ifelse(i==6,.57,pad) # panelScale(rx,c(1-npad,ke+npad))  gnams = stateNames[gsubs] > polygon(rep(px,ke),rep(laby,rep(5,ke))+ py,col=colors[pen]) H polygon(rep(px,ke),rep(laby,rep(5,ke))+py,col=colIdOutline,density=0) ; text(rep(idstart,ke),laby,gnams,adj=0,cex=cexText,xpd=T) } }`5?5??? ?zG{?QR?QR?zG{  idstart?7KƧ dotstat?GzH coltabs`??u?`x U.S.@z States@zNOP?POO*P?,O@@P?uO` npad/,O@?=p =x5? gnamsF$$$@ $$$@ colIdOutliney$ adjz xpd bN function(j){ !# Works using state abbreviations $# bnd.ord gives abbreviations in the $# the boundary are stored. 6# stateId give the abbreviations in the order plotted Ibnd.ord = rlStateVisBorders$st[is.na(rlStateVisBorders$x)] # State abbrev +rxpoly = range(rlStateVisBorders$x,na.rm=T) +rypoly = range(rlStateVisBorders$y,na.rm=T) .# ____________labeling and axes_______________ panelSelect(panels,1,j) panelScale() *box.x = rep(c(.14,.14,.208,.208,NA),2)-.04 par(xpd=T) y.ht = c(.05,.172) y.sep = .185*legfactor -box.y = 1.025*legfactor +c(y.ht,rev(y.ht),NA) >polygon(box.x,c(box.y,box.y+y.sep),col=c(colBackgr,colors[7])) 3polygon(box.x,c(box.y,box.y+y.sep),col=1,density=0) 6mtext("Cumulative Maps",side=3,line=line1,cex=cexText) Imtext('States Featured Above',side=3,line=line2,at=.20,cex=cexText,adj=0) Nmtext('States Featured Below',side=3,line=lineTiclab,at=.20,cex=cexText,adj=0) # Drawing Loop for (i in 1:ng){ if(i==6){  panelSelect(panels,6,j) panelScale()  panelFill (col=colBackgr)  panelOutline() 4 text (.5,.55,'Median For Sorted Panel',cex=cexText)  next } panelSelect(panels,i,j) panelScale(rxpoly,rypoly) gsubs = ib[i]:ie[i] @if(i < 5) cont = stateId[1:(5*i)] else cont = stateId[1:(5*i-4)] 3if(i==5){gsubs = c(gsubs,26); cont = stateId[1:26]} if(i==7)gsubs = c(gsubs,26)  gnams = stateId[gsubs] $# now find the state regions to plot $back = is.na(match(rlStateVisBorders $st,cont)) if(any(back)){ 0,7, pen) pen = pen[pen>0] =polygon(rlStateVisBorders$x[fore], rlStateVisBorders$y[fore], > density=-1,col=colors[pen], border=F) # outline states =polygon(rlStateVisBorders$x[fore], rlStateVisBorders$y[fore], D col=colLineForegr, density=0,lwd=lwdForeGr) # outline states  @ x  y 5?  x  y  colLineForegr lwdForeGr rlStateNationVisBorders x y colLineNation lwdNation,O?y@`@? DCz cexState??y@6@1 AKz??y@G@  HIz??dM function(j){ !# Works using state abbreviations $# bnd.ord gives abbreviations in the $# the boundary are stored. 6# stateId give the abbreviations in the order plotted Ibnd.ord = rlStateVisBorders$st[is.na(rlStateVisBorders$x)] # State abbrev +rxpoly = range(rlStateVisBorders$x,na.rm=T) +rypoly = range(rlStateVisBorders$y,na.rm=T) .# ____________labeling and axes_______________ panelSelect(panels,1,j) panelScale() #box.x = c(.14,.14,.208,.208,NA)+.00 par(xpd=T) y.ht = c(.05,.172) y.sep = .185*legfactor -box.y = 1.025*legfactor +c(y.ht,rev(y.ht),NA) (polygon(box.x,box.y+y.sep,col=colors[7]) *polygon(box.x,box.y+y.sep,col=1,density=0) @mtext("Two Ended Cumulative Maps",side=3,line=line1,cex=cexText) Fmtext('States Highlighted',side=3,line=line2,at=.25,cex=cexText,adj=0) Lmtext('Further From Median',side=3,line=lineTiclab,at=.15,cex=cexText,adj=0) # Drawing Loop for (i in 1:ng){ if(i==6){  panelSelect(panels,6,j) panelScale()  panelFill (col=colBackgr)  panelOutline() 4 text (.5,.58,'Median For Sorted Panel',cex=cexText)  next } panelSelect(panels,i,j) panelScale(rxpoly,rypoly) gsubs = ib[i]:ie[i] if(i < 5)cont = stateId[1:(5*i)] 3if(i==5){gsubs = c(gsubs,26); cont = stateId[1:26]} 5if(i==7){gsubs = c(gsubs,26); cont = stateId[26:51]} %if(i >7) cont = stateId[(5*i-8):51] gnams = stateId[gsubs] $# now find the state regions to plot .back = is.na(match(rlStateVisBorders$st,cont)) if(any(back)){ 0,7, pen) pen = pen[pen>0] =polygon(rlStateVisBorders$x[fore], rlStateVisBorders$y[fore], > density=-1,col=colors[pen], border=F) # outline states =polygon(rlStateVisBorders$x[fore], rlStateVisBorders$y[fore], D col=colLineForegr, density=0,lwd=lwdForeGr) # outline states polygon(box.x,c(box.y,box.y+y.sep),col=c(colBackgr,colors[7])) 3polygon(box.x,c(box.y,box.y+y.sep),col=1,density=0) 0,7, pen) pen = pen[pen>0] =polygon(rlStateVisBorders$x[fore], rlStateVisBorders$y[fore], > density=-1,col=colors[pen], border=F) # outline states =polygon(rlStateVisBorders$x[fore], rlStateVisBorders$y[fore], D col=colLineForegr, density=0,lwd=lwdForeGr) # outline states  3  !"#$%&'()*,-./012356783 AL AK AZ AR CA CO CT DE DC FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WYM fips ab class data.frame=3 Alabama Alaska Arizona Arkansas California Colorado Connecticut Delaware D.C. Florida Georgia Hawaii Idaho Illinois Indiana Iowa Kansas Kentucky Louisiana Maine Maryland Massachusetts Michigan Minnesota Mississippi Missouri Montana Nebraska Nevada New Hampshire New Jersey New Mexico New York North Carolina North Dakota Ohio Oklahoma Oregon Pennsylvania Rhode Island South Carolina South Dakota Tennessee Texas Utah Vermont Virginia Washington West Virginia Wisconsin Wyoming rlStateSetDefaults function() { # usage (# rlStateDefaults = rlStateSetDefaults() :# Candidate colors________________________________________ colorsRefRgb = matrix(c(  1.00,1.00,1.00, # white .90, .90, .90, # lighter gray  .80, .80, .80, # light gray  .50, .50, .50, # middle gray  .30, .30, .30, # dark gray  .00, .00, .00, # black  .93,1.00, .93, # light green  .00, .50, .00, # mid green - 1.00,1.00, .84, # light yellow foreground - .90, .80,1.00, # bright yellow foreground $ .80, .90,1.00, # light green blue " .60, .70, .85), # mid green blue  ncol=3,byrow=T) CcolorsRef = rgb(colorsRefRgb[,1],colorsRefRgb[,2],colorsRefRgb[,3]) 9names(colorsRef) = c("white","lighter gray","light gray", 5 "mid gray","dark gray", "black", 0 "light green","mid green", 5 "light yellow","bright yellow", E "light green blue","mid green blue") ?# Region colors________________________________________________ colorsRgb = matrix(c( 1.00, .15, .15, #region 1: red # .90, .55, .00, #region 2: orange " .00, .65, .00, #region 3: green * .20, .50,1.00, #region 4: greenish blue & .50, .20, .70, #region 5: lavendar - .00, .00, .00, #region 6: black for median - 1.00,1.00, .80), #non-highlighted foreground  ncol=3,byrow=T) 7colors = rgb(colorsRgb[,1],colorsRgb[,2],colorsRgb[,3]) 8names(colors) =c("red","orange","green","greenish blue", = "purple","black","light yellow") details = list( # panel layout grouping 4 ne = 5, # number of item per group 8 ng = ceiling(51/ne), # number of groups of states @ ib = c(1, 6,11,16,21,26,27,32,37,42,47), #group lower index @ ie = c(5,10,15,20,25,26,31,36,41,46,51), #group upper index # panel layout margin allocation 2 topMar = .95, # margin panel height (inches) - botMar = .5, # no legend bottom margin  botMarLegend = .75, * botMardif = .25, # maybe not needed , rowSep = c(0,0,0,0,0,.05,.05,0,0,0,0,0), ) rowSize = c(7,7,7,7,7,1.5,7,7,7,7,7), " groupedRowSize = c(35,1.5,35), # groupedRowSep = c(0,.05,.05,0), # panel column width allocation  mapWidth=1.5,  idWidth=c(.95,.30),  # panel scaling 2 sc = 1.08, # x axis scale expansion factor < pad = .67, # y axis padding for integer plotting locates A # ry = c(1-pad,ke+pad),ke = no. items in panel ( padex = .34, # total panel padding D # (.67-.5)=.17 padding at top and bottom of panel D padMinus = .63, # .67 - .04 # keep reference line off panel edge # mtext line placement 6 line1 = 1.6, # top panel 1st line placement 2 line2 = .9, # top panel 2nd line placement 1 line3 = .7, # bottom panel line placement 2 line4 = -.68, # reference line (below panel) 6 lineTiclab =.2, # lowest line for map legend text # grid line parameters & colFill = colorsRef["light gray"], ! colGrid = colorsRef["white"],  lwdGrid = 1, 8 mgpTop = c(2,.1,0), # gridline (tick) placement 8 mgpBottom = c(2,0,0), # gridline (tick) placement 8 padjBottom=-.7, # gridline (tick placement # refval  # see padMinus above  ltyRefVal=2,  lwdRefVal = 2, & colRefVal = colorsRef["mid green"], # panel outline * colOutline = "black", # panel outline <#__________________________________________________________ # arrow plot parameters  lengthArrow = .08,  lwdArrow = 3, # bar plot parameters . barht = 2/3, # fraction of line spacing * colBarOutline = colorsRef["mid gray"], # box plot parameters  thinBox=.30, #.29  thickBox=.60, #.58 # useBlack=F, # for outliners  medianLine=.88,  colDotMedian="white",  pchMedian=19,  cexMedian=.95,  lwdMedian = 2,  colMedian="white", ! cexOutlier = .8, # see cexDot  lwdOutlier = 2, - colBoxOutline = colorsRef["light gray"], # dot plot parameters $ pch = 16, # plotting character  cexDot = 1.33, # dot size + conf=95, # % confidence interval ' colDotOutline = colorsRef["black"],  lwdDotOutline = 1,  lwdConf = 2, # id link panel # map parameters  colLineBackgr = colGrid, , colLineForegr = "black", #colBarOutline, ' colLineNation = colorsRef["black"], = cexState = .32, # label size for AK, HI, DC in top map.  lwdBackGr = 1,  lwdForeGr = 1,  lwdNation = 1, # cex for character size  cexText = .64,  cexTitle = 1.0,  cexDotId = .9,  cexConf = .55,  cexOut = .6,  cexArrow = .08,  # colors for drawing " colArrow = colorsRef["black"], ) colIdOutline= colorsRef["dark gray"], ' colMedian = colorsRef["dark gray"],  colRef = "black",  colBackgr = colFill ) +return(list(colors=colors,details=details)) } colorsRefRgb matrix???????陙?陙?陙????333333?333333?333333?\(??\(????Gz??陙??陙???333333?ffffff?333333"@ byrow  colorsRef rgb?@@M white lighter gray light gray mid gray dark gray black light green mid green light yellow bright yellow light green blue mid green blue colorsRgb??333333?333333??ᙙ??ə????ə?ffffff???陙"@  ?@@M  red orange green greenish blue purple black light yellow list ne@ ceiling3@I?@@&@0@5@:@;@@@B@E@G@@$@.@4@9@:@?@B@D@G@IT?ffffffU? botMarLegend? botMardif?[??\@@@@@?@@@@@_@A?@A^?? mapWidth? idWidth?ffffff?333333?GzH?p =q padex?\(?(\)???ffffff line45?\(?ə light gray white?@?@5?ffffff@@ mid green black?zG{@3@@ mid gray?333333?333333?(\) colDotMedian white pchMedian@3 cexMedian?ffffff@ white?陙@ colBoxOutline light gray@0?GzH@W black lwdDotOutline?@  black black?zG{ ????zG{S? cexDotId? cexConf?ᙙ cexOut?333333 cexArrow?zG{ colArrow black dark gray dark gray colRef black return  function(j,refval){ par(xpd=T)  panelSelect(panels,ng,j) panelScale() K lines(c(.17,.35),c(line4,line4),lty=ltyRefVal,col=colRefVal,lwd=lwdRefVal) 1 text(.40,line4+.01,'US value',cex=cexText,adj=0) }`1 u`x?\(?ffffff%%y?ٙ%?zG{ US valuez WA WA WA WA WA WA WA WA WA WA ID ID ID ID ID ID ID ID MT MT MT MT MT MT MT MT ND ND ND ND ND SD SD SD SD SD SD MI MI MI MI MI MI MI MI MI MI MI MI MI MI MI MI MI MI MI VT VT VT VT VT NH NH NH NH NH MA MA MA MA MA MA MA MA MA MA MD MD MD MD MD MD MD MD OH OH OH OH OH OH OH OH PA PA PA PA PA PA PA PA PA PA PA WV WV WV WV WV WV WV WV WV IN IN IN IN IN IN IN IL IL IL IL IL IL IL IL IL IL IL MO MO MO MO MO MO MO MO MO MO KS KS KS KS KS KS NV NV NV NV NV NV CA CA CA CA CA CA CA CA CA CA AZ AZ AZ AZ AZ AZ AZ AZ OK OK OK OK OK OK OK TX TX TX TX TX TX TX TX TX TX TX TX TX AL AL AL AL AL AL AL NC NC NC NC NC NC NC AK AK AK AK AK AK AK AK AK AK AK AK AK HI HI HI HI HI HI HI HI HI HI HI OR OR OR OR OR OR OR OR OR NJ NJ NJ NJ NJ NJ NJ NJ NJ NY NY NY NY NY NY NY NY NY NY NY NY WY WY WY WY WY WY WY WY WY UT UT UT UT UT UT UT GA GA GA GA GA GA GA FL FL FL FL FL FL FL FL FL FL FL SC SC SC SC SC SC VA VA VA VA VA VA VA VA NE NE NE NE NE NE NE NE NE NE IA IA IA IA IA IA IA IA IA IA ME ME ME ME ME ME MN MN MN MN MN MN MN MN WI WI WI WI WI WI WI WI WI WI NM NM NM NM NM NM NM NM AR AR AR AR AR AR AR AR AR AR TN TN TN TN TN TN TN TN TN KY KY KY KY KY KY KY KY KY KY MS MS MS MS MS MS MS MS LA LA LA LA LA LA LA LA CT CT CT CT CT CT DE DE DE DE DE DE DC DC DC DC DC DC CO CO CO CO CO CO CO CO RI RI RI RI RI?@@@2@2@,@@@@2@5@5@=@@@@@2@5@G@G@@@@@=@5@G@O@P @G@G@P @P @N@G@T@W@@X@V@V @T@@R@T@W@X@X@Y@@Y@@X@V@V@W@`@a@a@@`@a@a@b0@a@@`@b0@b@b@c@c@bp@bp@`@\ @_@_@`@_@]@\ @W@Y@[`@[`@Y@Y@@W@[`@\ @\ @`@@`@`@`P@` @_@[`@[`@[`@\ @\ @]@[@Z`@Y@U@W@W@V@U@U@S@U @U @U@U@T@S`@S`@S@S@Q@S`@S`@T@T@S@S@Q`@Q`@J@Q @Q`@Q`@J@+@:@:@8@+?@+@+@8@8@4@4@(?@:@C@@C@@@@8@8@:@I@Q`@Q`@L@@L@@I@I@L@@L@@R @R @P@P@N@L@J@E@@I@V @X @X@V@V@V @Z@_@_@]@@[@Y@"@0@0@*@@@@@@@@@C@D@D@A@@@A@B@@A@@@@@@,@2@2??@`@`@a @a @`@` @`P@`@`@@`@`@`@`@@\ @\ @\@\@_@@_@@@@G@G@G@C@@@@@@@@:@@@@@C@@C@@:@X @Y@[`@[@X@X@V@X@X@[@\@[@@Y@Y@Y@V@Y@[@]@@]@[`@]@_@_@_@@Y@@Z`@[@G@N@P @P`@Q@Q @J@J@G@P @S0@S@S@S@S`@Q@P`@P @b`@c@c @b0@a@O@T@R@R@S0@P @P @R@T@@V @U`@U`@U @S@S0@R@C@@I@I@I@E@@E@@C@@Q`@S@S@T@T@T @R @R @Q`@T@Y@@Z@Y@X @V @T@T@W@Y@@Y@Z`@Y@@T@T@U@V@T@V @V @U @T@S@T @R @T @S@T@U @U`@R @`@a@a@a @`@` @`@`@_@_@`@a@`@`@`P@C@@G@J@J@J@J@C@@a@bp@bp@a@V@@V@@V@V@S`@S`@R@S`@S`@V@V@U@R @R @N@N@V@V@R@R@R @R @U@V@V@S@S@S@S@P`@P@P@V@V@U@U@T@U @U@V@U@S@R@S@Q@O@O@S@U@V@@V@@R@R@V@@V@@R@R@R@R@R @R@@R@@P@P@@Q`@Q`@K@K@H@@H@@E@I@@I@@O@O@Q@@M@@H@@H@@I@Q@@Q@Q`@Q`@P@P @N@M@K@K@M@@K@K@I@@I@@F@@F@@H@@O@O@I@G@@G@O@P@P@O@O@G@E@K@L@M@P@L@L@K@E@C@@C@@D@@D@@J@K@K@J@E@E@N@N@C@C@I@N@N@I@C@;@;@=@@@K@E@E@7@7@;@C@C@E@E@>@A@@C@C@C@C@A@@=@.@"@@@,@,@8@8@A@@A@@3@3@0@1@D@@D@@B@=@A@@A@@7@4@$@(@@$@(@.@.@1@0@3@(@$@?@@&@)@*@)@S`@S`@R@S`@S`@N@N@P@P@O@O@K@I@M@N@P @V@@V@@O@P@Q`@Q`@Q@R@@S@@S@@U@R@R@P@M@@M@@M@@N@R @N@N@M@@M@@E@E@A@@A@@7@2@2@3@3@3@2@2@?@@*@0@0@A@@A@@=@<@7@I@@E@E@D@@D@@F@@F@@P@P@P`@P@L@K@K@M@@M@@Q@Q@P@P@M@L@L@P@P`@X@@W@@T@R@V@@V@V@U@S@Q@Q@S@U@U @T@S@P@P@P@Q@S@E@E@C@8@8@7@7@D@@D@@C@@C@@A@@;@;@=@>@D@@D@@D@@A@@A@@A@@A@@C@@I@H@@H@@F@@D@@D@@E@G@G@@A@@A@@1@1@5@6@;@;@;@6@5@1@(@.@Q`@Q`@P@O@O@M@I@H@@H@@K@G@E@B@@D@E@M@@M@@M@@K@E@E@E@Q`@Q`@P@@PM st x y data.frame= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434l@@2@5@G@O@T@W@@X@W@X@X@Y@@Y@@X@Y@[`@\ @\@\@_@@_@@`@@`@a@a@b`@c@c @b0@b@b@c@c@bp@a@a @a @`@`@_@_@_@@_@_@]@@]@[`@[@\@[@@Y@Y@Y@V@V @U @U`@R @P@P@N@L@J@E@@E@@C@@@@8@4@4@(???@?@@"@0@0@*@@@@@@@@@C@D@D@A@@@A@B@@A@@@`@a@`@`@`Pl@V@V@V@V@V@V@V@U@U@S@R@S@Q@O@O@Q@@Q@R@@S@@S@@U@V@@V@@V@@V@@X@@W@@T@R@R @R@@R@@P@P@@P@O@K@I@H@@E@E@D@@D@@B@=@<@7@2@?@@*@0@0@1@1@(@.@"@@@,@,@8@7@7@7@;@;@=@@@K@N@P@S`@V@@V@@7@4@$@(@@$@(@.@.@1@0@3@(@$@@@@&@)@(@)@G@E@B@@D@EM x y data.frame=l 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108