# Using MRIcrotome to make pretty figures

I don't know how to use MRIcrotome very well, but on the other hand there doesn't seem to be a Wiki page for this, so I'm starting one. I've copied the basics from Making pretty figures using MRIcrotome (githack.com), where Jason Lerch wrote some good instructions:

#### 2018-06-30

Load the required data from a file; for the moment, this contains two 3D volumes; anatVol and stats containing the anatomy to use in the background and the output of some statistical computations. (Note for RMINC users: in these examples anatVol and stats would be the output of mincArray)

``load("sliceData.RData")``

The best way to use MRIcrotome is through pipes; let’s load the full tidyverse for now (though only pipes are actively used). Also, the graphics subsystem is grid graphics, so let’s go ahead and load that as well.

``library(tidyverse)``
``````## Loading tidyverse: ggplot2
``## Conflicts with tidy packages ----------------------------------------------``
``````## filter(): dplyr, stats
## lag():    dplyr, stats
## slice():  dplyr, .GlobalEnv, MRIcrotome``````
``````library(grid)
library(MRIcrotome)``````

That’s it for the set-up. On to actual package usage.

## Simple figures

Starting off with the simplest figure; a coronal slice through the brain.

``````sliceSeries(nrow = 1, slices=200) %>%
anatomy(anatVol, low=700, high=1400) %>%
draw()``````

That’s the basic anatomy of displaying MRI anatomy. It always begins with a call to sliceSeries, following by a call to anatomy, and finally the command to draw the results.

Let’s prettify it, and overlay the stats.

``````sliceSeries(nrow = 1, slices=200) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
draw()``````

So far, so good. A legend would be nice, though.

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw()``````

The command is called sliceSeries for a reason …

``````sliceSeries(nrow = 5, ncol=5, begin=100, end=350) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw()``````

You can also have more than one slice series:

``````sliceSeries(nrow = 8, begin=100, end=350) %>%
anatomy(anatVol, low=700, high=1400) %>%
sliceSeries() %>% # if no arguments are specified, reuse previous sliceSeries args
anatomy() %>% # if no arguments are specified, reuse previous anatomy call
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw()``````

And with some titles:

``````sliceSeries(nrow = 8, begin=100, end=350) %>%
anatomy(anatVol, low=700, high=1400) %>%
sliceSeries() %>%
anatomy() %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw()``````

And change the layout orientation

``````sliceSeries(ncol = 8, begin=100, end=350) %>%
anatomy(anatVol, low=700, high=1400) %>%
sliceSeries() %>%
anatomy() %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw(layout = "row")``````

Multiple legends

``````sliceSeries(ncol = 8, begin=100, end=350) %>%
anatomy(anatVol, low=700, high=1400) %>%
legend() %>%
sliceSeries() %>%
anatomy() %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw(layout = "row")``````

Let’s do multiple legends on the same slice series, going with a column layout

TODO: cannot use no-args version of anatomy() if asking for a legend

``````sliceSeries(nrow = 8, begin=100, end=350) %>%
anatomy(anatVol, low=700, high=1400) %>%
sliceSeries() %>%
anatomy(anatVol, low=700, high=1400) %>%
legend() %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
draw()``````

It can also do contours

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
anatomy(anatVol, low=700, high=1400) %>%
contours(anatVol, levels=c(1000, 1400), col="blue") %>%
draw()``````

Of course contours can be mixed with sliceSeries as you please

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
anatomy(anatVol, low=700, high=1400) %>%
sliceSeries() %>%
anatomy() %>%
contours(anatVol, levels=c(1000, 1400), col="blue") %>%
sliceSeries() %>%
contours(anatVol, levels=c(1000, 1400), col="blue") %>%
draw()``````

Contours can be given different colours, linetypes, and widths

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
contours(anatVol, levels=c(1000, 1400), col=c("blue", "red"), lwd=1:2, lty=c(1,3)) %>%
draw()``````

The most likely use is combined with stats - let’s highlight the most significant:

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
contours(abs(stats), levels=c(3,5), lwd=2, lty=c(3,1), col="green") %>%
draw()``````

Contours can of course have legends, too.

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, low=2, high=6, symmetric = T) %>%
legend("t-statistics") %>%
contours(abs(stats), levels=c(3,5), lwd=2, lty=c(3,1), col="green") %>%
legend("Most sig.") %>%
draw()``````

And contours can take on any colour scale

``````sliceSeries(nrow = 1, begin=200, end=300) %>%
anatomy(anatVol, low=700, high=1400) %>%
contours(abs(stats), levels=2:6, col=topo.colors(255), lty=3) %>%
legend("t statistics") %>%
draw()``````

And of course works in slice series with multiple slices too

``````sliceSeries(nrow=5, ncol=6, begin=70, end=400) %>%
contours(anatVol, levels=c(1000, 1200, 1500), col=gray.colors(255)) %>%
draw()``````

Opacity can be controlled with the alpha parameter to anatomy and overlay:

``````sliceSeries(nrow=5, begin=150, end=250) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.1) %>%
sliceSeries() %>% anatomy() %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.5) %>%
sliceSeries() %>% anatomy() %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.9) %>%
draw()``````

``````sliceSeries(nrow=5, begin=150, end=250) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.1) %>%
sliceSeries() %>% anatomy() %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.5) %>%
sliceSeries() %>% anatomy() %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.9) %>%
legend("t-statistics") %>%
contourSliceIndicator(anatVol, c(700, 1400)) %>%
draw()``````

If you’d rather display a slice underneath the slice indicators, you can do that too

``````sliceSeries(nrow=5, begin=150, end=250) %>%
anatomy(anatVol, low=700, high=1400) %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.1) %>%
sliceSeries() %>% anatomy() %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.5) %>%
sliceSeries() %>% anatomy() %>%
overlay(stats, 2, 6, symmetric = T, alpha=0.9) %>%
legend("t-statistics") %>%
anatomySliceIndicator(anatVol, 700, 1400) %>%
draw()``````

Let’s see some possible permutations of slice dimensions and sliceIndicator dimensions

``````sliceSeries(nrow=5, begin=150, end=250) %>%
anatomy(anatVol, low=700, high=1400) %>%
legend("t-statistics") %>%
contourSliceIndicator(anatVol,c(700, 1400)) %>%
draw()``````

``````sliceSeries(nrow=5, begin=150, end=250, dimension = 1) %>%
anatomy(anatVol, low=700, high=1400) %>%
legend("t-statistics") %>%
contourSliceIndicator(anatVol, c(700, 1400)) %>%
draw()``````

``````sliceSeries(nrow=5, begin=50, end=150, dimension = 3) %>%
anatomy(anatVol, low=700, high=1400) %>%
legend("t-statistics") %>%
contourSliceIndicator(anatVol, c(700, 1400)) %>%
draw()``````

``````sliceSeries(nrow=5, begin=50, end=150, dimension = 3) %>%
anatomy(anatVol, low=700, high=1400) %>%
legend("t-statistics") %>%
contourSliceIndicator(anatVol, c(700, 1400), dimension = 2) %>%
draw()``````

Here are some addition things I've learned by trial-and-error and/or harassing people:

The brain slices are by default shown in posterior-anterior order, which I find infuriating. In order to have them appear in anterior-posterior order, as they should always be, put the larger slice number first, like so: `sliceSeries(begin=150, end=50).`

• No labels