# [R] Conditional Statements for Graphing

Douglas Bates bates at stat.wisc.edu
Tue Jul 22 17:01:39 CEST 2003

```"Harold Doran" <hdoran at nasdc.org> writes:

> Dear List
>
> I have math test scores for male and female students where gender is
> a dummy code (female =1). I also have a variety of other demographic
> variables.
>
> However to begin, I want to create a very simple stripchart where
> female math scores are a blue circle and male scores are a red
> triangle.
>
> I am having difficulty using conditional statements to accomplish this.

The basic plotting commands in R (plot, lines, points) take a col
argument that can be a vector.  Another argument that can be
vectorized is pch which selects the plot character in plot and points.

For example

> data(mtcars)
> str(mtcars)
`data.frame':	32 obs. of  11 variables:
\$ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
\$ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
\$ disp: num  160 160 108 258 360 ...
\$ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
\$ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
\$ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
\$ qsec: num  16.5 17.0 18.6 19.4 17.0 ...
\$ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
\$ am  : num  1 1 1 0 0 0 0 0 0 0 ...
\$ gear: num  4 4 4 3 3 3 3 4 4 4 ...
\$ carb: num  4 4 1 1 2 1 4 2 2 4 ...
> unique(mtcars\$cyl)
[1] 6 4 8
> plot(mpg ~ wt, data = mtcars, col = ifelse(cyl == 4, 'blue', ifelse(cyl == 6, 'green', 'red')))

If all else fails there is a trick that can be used to build up plots
in stages.  Begin by plotting all the data with type = 'n'.  This
suppresses both points and lines but does define the axes so they will
accomodate all the data.  Then add points or lines for selected
groups with pch and col set to scalars.  The same plot as above could
be generated with

> plot(mpg ~ wt, data = mtcars, type = 'n')
> points(mpg ~ wt, data = mtcars, subset = cyl == 4, col = 'blue')
> points(mpg ~ wt, data = mtcars, subset = cyl == 6, col = 'green')
> points(mpg ~ wt, data = mtcars, subset = cyl == 8, col = 'red')

```