p---
title: "Select points by drawing a freehand gate"
author: "Wajid Jawaid"
email: "wj241@alumni.cam.ac.uk"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Select points by drawing a freehand gate}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

**gatepoints** provides an easy to use function, **fhs** (freehand select) for gating or selecting points freehand on a plot. If using from RStudio please use X11 display for a better user experience. Take the simple plot below:  

```{r simpleplot, fig.show = 'hold', fig.cap = 'Simple plot.', fig.width = 6, fig.height = 6, dpi = 100}
x <- data.frame(x=1:10, y=1:10, row.names = 1:10)
## If you are using RStudio do X11() first.
plot(x, pch = 16, col = "red")
```

```{r, echo=TRUE, eval = FALSE}
library(gatepoints)
selectedPoints <- fhs(x, mark = TRUE)
```

To select an arbitrarily complex region run the above commands and proceed as follows:

1. Mark region of your choice by **left clicking** around your region of interest.
2. Close polygon by **right clicking**. On the Windows platform click **stop** after right clicking.  

```{r, echo = FALSE, eval = TRUE}
selectedPoints <- c("4", "5", "7")
```

```{r gatedplot, echo=FALSE, eval = TRUE, fig.show = 'hold', fig.cap = 'Selected points', fig.width = 6, fig.height = 6, dpi = 100}
plot(x, pch = 16, col = "red")
x <- rbind(c(6.099191, 8.274120), 
           c(8.129107, 7.048649),
           c(8.526881, 5.859404),
           c(5.700760, 6.716428),
           c(5.605314, 5.953430),
           c(6.866882, 3.764390),
           c(3.313575, 3.344069),
           c(2.417270, 5.217868))
polygon(x[,1], x[,2])
points(c(4,5,7), c(4,5,7))
```  

```{r, echo = FALSE, eval = TRUE}
x <- as.data.frame(x)
colnames(x) <- c("x", "y")
attr(selectedPoints, "gate") <- x
```

The points can be marked as defined by the user with additional parameters passed to the **points** function. The names of the points as given by the rownames of the data frame **x** will be returned in **selectedPoints**. Additionally the points selected for the gate will be returned as the **gate** attribute.

```{r, echo = TRUE, eval = TRUE}
selectedPoints
```
