`{ggplot2}`

has many built-in coordinate systems which
are used to both 1) produce the two-dimensional position of the plotted
data and 2) draw custom axes and panel backgrounds.
`coord_geo()`

uses this second purpose to draw special axes
that include timescales. However, **deeptime** also
includes a number of other coordinate systems whose primary function is
to modify the way data is plotted. To demonstrate this, we’ll first need
to load some packages.

```
# Load deeptime
library(deeptime)
# Load ggplot for making plots
# It has some example data too
library(ggplot2)
```

One limitation of the traditional `coord_trans()`

function
in `{ggplot2}`

is that you can not flip the axes while also
transforming the axes. Historically, you would need to either 1) use
`scale_x_continuous()`

or `scale_y_continuous()`

to transform one or both of your axes (which could result in the
untransparent loss of data) in combination with
`coord_flip()`

or 2) transform your data before supplying it
to `ggplot()`

. `coord_trans_flip()`

accomplishes
this without the need for `scales`

or transforming your data.
It works just like `coord_trans()`

, with the added
functionality of the axis flip from `coord_flip()`

.

```
ggplot(mtcars, aes(disp, wt)) +
geom_point() +
coord_trans_flip(x = "sqrt", y = "log10") +
theme_classic()
```

Note: back in 2020, `{ggplot2}`

updated
all the directional stats and geoms (e.g., boxplots and histograms) to
work in both directions based on the aesthetic mapping. This somewhat
makes this function redundant, but I still find it useful.

Another limitation of the traditional `coord_trans()`

is
that each axis is transformed independently.
`coord_trans_xy()`

expands this functionality to allow for a
two-dimensional linear transformation as generated by
`ggforce::linear_trans()`

. This allows for rotations,
stretches, shears, translations, and reflections. A dummy example using
the `?mtcars`

dataset from `{ggplot2}`

is included
below. While applications of this functionality may seem abstract for
real data, see the plotting traits article for
a potential real-world application using species trait data.

```
# make transformer
library(ggforce)
trans <- linear_trans(shear(50, 0))
# set up data to be plotted
square <- data.frame(
disp = c(
min(mtcars$disp), min(mtcars$disp),
max(mtcars$disp), max(mtcars$disp)
),
wt = c(
min(mtcars$wt), max(mtcars$wt),
max(mtcars$wt), min(mtcars$wt)
)
)
# plot data normally
library(ggplot2)
ggplot(mtcars, aes(disp, wt)) +
geom_polygon(data = square, fill = NA, color = "black") +
geom_point(color = "black") +
coord_cartesian() +
theme_classic()
```