R is a wonderfully powerful tool for the production of publication-quality figures. The power of R to make these plots comes at a cost: with absolutley everything customizable the learning curve is steep, and the defaults can be ugly. Lets take a look at a default plot.

```
x <- seq(0, 2 * pi, , 100)
y <- 1e+10/(1 - x^2) + 4e+11
plot(x, y, type = "b")
```

Here, I’ve generated two vectors called `x`

and `y`

. `x`

is a sequence of 100 points from 0 to `2*pi`

, and `y`

is just some sample function that looks a little like a resonance. It’s not bad, but R can do better.

In order to tart this plot up, we’re going to load up three packages.

```
library(ggplot2)
```

`ggplot2`

is a graphics system for R that is based on the ‘grammar of graphics’. It’s a popular and powerful package, but we’re only going to scratch the surface here.

Lets load up the other two packages.

```
library(photonMonkey)
library(scales)
```

The `photonMonkey`

package is my collection of utility functions for common tasks I’ve come across in my work. It’s avalible on github. `scales`

is currently required to smarten up those axis labels.

So `ggplot2`

‘s utility plot function for quick plots is `qplot()`

, which in most ways works exactly like the default `plot()`

function. The default looks like this:

```
qplot(x, y, geom = c("line", "point"))
```

A key difference between `qplot`

and `plot`

is that `qplot`

returns a ggplot object, which allows you to add layers. To smarten up this plot, I have added 5 layers, and this is the result:

```
qplot(x,y,geom=c("line","point"))+
theme_bw()+
scale_y_continuous(labels=label_scientific10)+
scale_x_continuous(expand=c(0,0))+
xlab(label_frequency(si_prefix="G"))+
ylab("SCS (arb)")
```

So, each of these layers helps pretty-fy the plot,

`theme_bw()`

is a theme for the plot, which removes the default grey background and changes the colour scheme. There are many many themes (even, gasp, an excel theme).`scale_y_continuous(labels=label_scientific10)`

provides nice scientific style formatting to the large y value numbers.`scale_x_continuous(expand=c(0,0))`

removed the padding on the x-axis.`xlab(label_frequency(si_prefix="G"))`

adds a nicely formatted axis label.`photonMonkey`

includes loads of photonics/plasmonic themed labels like this.`ylab`

is just a custom label. I pretended this plot was a scattering-cross-section.

So, from a basic plot to a rather nicer looking one, thats some very-basics of using ggplot for plotting. The next post will deal with colourplots, whicih crop up loads in physics and, with the right functions, are produced very nicely in R.