# dotsInPolys

##### Put dots in polygons

Make point coordinates for a dot density map

- Keywords
- spatial

##### Usage

`dotsInPolys(pl, x, f = "random", offset, compatible = FALSE)`

##### Arguments

- pl
- list of polygons of class
`polylist`

, or an object of class SpatialPolygons or SpatialPolygonsDataFrame - x
- integer vector of counts of same length as pl for dots
- f
- type of sampling used to place points in polygons, either "random" or "regular"
- offset
- for regular sampling only: the offset (position) of the regular
grid; if not set,
`c(0.5,0.5)`

, that is the returned grid is not random - compatible
- what to return, if TRUE a a list of matrices of point coordinates, one matrix for each member of pl, if false a SpatialPointsDataFrame with polygon ID values

##### Details

With f="random", the dots are placed in the polygon at random, f="regular" - in a grid pattern (number of dots not guaranteed to be the same as the count). When the polygon is made up of more than one part, the dots will be placed in proportion to the relative areas of the clockwise rings (anticlockwise are taken as holes). From maptools release 0.5-2, correction is made for holes in the placing of the dots, but depends on hole values being correctly set, which they often are not. The wrapper package spgpc may be used to check holes, see the `dontrun`

section of the example.

##### Value

- If compatible=TRUE, the function returns a list of matrices of point coordinates, one matrix for each member of pl. If x[i] is zero, the list element is NULL, and can be tested when plotting - see the examples. If compatible=FALSE (default), it returns a SpatialPointsDataFrame with polygon ID values as the only column in the data slot.

##### Note

Waller and Gotway (2004) Applied Spatial Statistics for Public Health Data (Wiley, Hoboken, NJ) explicitly warn that care is needed in plotting and interpreting dot density maps (pp. 81-83)

##### See Also

##### Examples

```
x <- read.shape(system.file("shapes/sids.shp", package="maptools")[1])
ncpolys <- Map2poly(x)
try1 <- dotsInPolys(ncpolys, as.integer(x$att.data$SID74), compatible=TRUE)
plot(ncpolys)
xx <- lapply(try1, function(x) {if (!is.null(x)) points(as.matrix(rbind(x)), pch=18, col="red")}) # added as.matrix(rbind(x)), thanks to Nicholas Grassly
try2 <- dotsInPolys(ncpolys, as.integer(x$att.data$SID74), f="regular", compatible=TRUE)
plot(ncpolys)
xx <- lapply(try2, function(x) {if (!is.null(x)) points(as.matrix(rbind(x)), pch=18, col="red")})
nc_SP <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], proj4string=CRS("+proj=longlat +ellps=clrk66"))
library(spgpc)
pls <- getSpPpolygonsSlot(nc_SP)
pls_new <- lapply(pls, checkPolygonsHoles)
nc_SP <- SpatialPolygonsDataFrame(SpatialPolygons(pls_new, proj4string=CRS(proj4string(nc_SP))), data=as(nc_SP, "data.frame"))
try1 <- dotsInPolys(nc_SP, as.integer(nc_SP$SID74))
plot(nc_SP, axes=TRUE)
plot(try1, add=TRUE, pch=18, col="red")
try2 <- dotsInPolys(nc_SP, as.integer(nc_SP$SID74), f="regular")
plot(nc_SP, axes=TRUE)
plot(try2, add=TRUE, pch=18, col="red")
```

*Documentation reproduced from package maptools, version 0.6-15, License: GPL version 2 or later (R and interface code), MIT (shapelib code)*