`section`

objects in the oce package are a convenient way of storing a series of CTD casts together – indeed, the object name derives from the common name for such a series of casts collected from a ship during a single campaign.

In it’s heart, a `section`

object is really just a collection of `ctd`

objects, with some other metadata. The CTD stations themselves are stored as a list of `ctd`

objects in the `@data`

slot, like:

```
library(oce)
data(section)
str(section@data$station, 1)
```

```
List of 124
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
$ :Formal class 'ctd' [package "oce"] with 3 slots
[list output truncated]
```

Just to prove it, we can plot make a standard `ctd`

plot of one of them, by accessing them directly with the `[[`

accessor syntax. Let’s plot the 100th station:

`plot(section[['station']][[100]])`

## Making nice plots of the sections themselves

The main advantage of a `section`

object is to be able to quickly make plots summarizing all the data in the section. This is accomplished using the `plot`

method for `section`

objects, which you can read about by doing `?"plot,section-method"`

. For example, to make a contour plot of the temperature:

`plot(section, which='temperature', xtype='distance')`

Ok, cool. But what about some colors? Use the `ztype='image'`

argument!

```
plot(section, which='temperature', xtype='distance',
ztype='image')
```

## Finer control over the section plot

To get finer control over the section plot than is possible with the `section`

`plot()`

method, one trick I will sometimes do is extract the data I want from the section as a gridded matrix, and then plot the matrix directly using the `imagep()`

function.

First, we “grid” the section so that all the stations comprise the same pressure levels:

`s <- sectionGrid(section, p='levitus')`

Now, we can loop through the `station`

fields, extracting the data as we go.

```
nstation <- length(s[['station']])
p <- unique(s[['pressure']])
np <- length(p)
T <- S <- array(NA, dim=c(nstation, np))
for (i in 1:nstation) {
T[i, ] <- s[['station']][[i]][['temperature']]
S[i, ] <- s[['station']][[i]][['salinity']]
}
```

Basically, what we’re doing here is creating an empty matrix, then filling each row with the data from the section stations. We can make a quick plot with `imagep()`

:

```
distance <- unique(s[['distance']])
par(mfrow=c(2, 1))
imagep(distance, p, T, col=oceColorsTemperature, flipy=TRUE)
imagep(distance, p, S, col=oceColorsSalinity, flipy=TRUE)
```

Or we can do some fancier things, like use the colormap() function and plot some filled contours:

```
par(mfrow=c(2, 1))
Tcm <- colormap(T, breaks=seq(4, 24, 2), col=oceColorsTemperature)
Scm <- colormap(S, breaks=seq(34, 36.8, 0.2), col=oceColorsSalinity)
imagep(distance, p, T, colormap=Tcm, flipy=TRUE,
ylab='p [dbar]', filledContour=TRUE,
zlab='temperature [degC]')
imagep(distance, p, S, colormap=Scm, flipy=TRUE,
xlab='distance [km]', ylab='p [dbar]', filledContour=TRUE,
zlab='salinity')
```