It is possible to transform the coordinates of your spline data from
cartesian to polar and vice versa, with transform_coord().
Let’s attach the package rticulate and load the data set
tongue.
library(rticulate)
data(tongue)
tongue
#> # A tibble: 3,612 × 28
#> speaker seconds rec_date prompt label TT_displacement TT_velocity
#> <fct> <dbl> <fct> <fct> <fct> <dbl> <dbl>
#> 1 it01 1.31 29/11/2016 15:10:57 Dico p… max_… 67.1 36.6
#> 2 it01 1.20 29/11/2016 15:11:03 Dico p… max_… 77.9 -7.73
#> 3 it01 1.08 29/11/2016 15:11:25 Dico p… max_… 65.9 21.1
#> 4 it01 1.12 29/11/2016 15:11:35 Dico p… max_… 64.4 8.76
#> 5 it01 1.42 29/11/2016 15:11:57 Dico p… max_… 76.9 -4.72
#> 6 it01 1.35 29/11/2016 15:12:53 Dico p… max_… 78.1 -5.68
#> 7 it01 1.07 29/11/2016 15:13:44 Dico p… max_… 69.9 -40.0
#> 8 it01 1.17 29/11/2016 15:13:49 Dico p… max_… 78.0 -7.31
#> 9 it01 1.28 29/11/2016 15:14:11 Dico p… max_… 67.1 34.5
#> 10 it01 1.10 29/11/2016 15:14:22 Dico p… max_… 75.9 -23.5
#> # ℹ 3,602 more rows
#> # ℹ 21 more variables: TT_abs_velocity <dbl>, TD_displacement <dbl>,
#> # TD_velocity <dbl>, TD_abs_velocity <dbl>, TR_displacement <dbl>,
#> # TR_velocity <dbl>, TR_abs_velocity <dbl>, fan_line <int>, X <dbl>, Y <dbl>,
#> # word <fct>, item <dbl>, ipa <fct>, c1 <fct>, c1_phonation <fct>,
#> # vowel <fct>, anteropost <fct>, height <fct>, c2 <fct>, c2_phonation <fct>,
#> # c2_place <fct>Now let’s convert the cartesian coordinates to polar.
transform_coord() converts to polar coordinates by default.
Your data set must contain columns named X and
Y with, respectively, the x and y
coordinates (if the columns are named differently, you will have to
rename them). The function extracts xy data from two fan
lines (the defaults are 10, and 25), and it
uses these data to find the origin. By default, a column named
fan_line is used for the fan lines number, but it can be
supplied by the user with the argument fan_line_col as a
string.
If you have imported data using read_aaa(), the defaults
will work, so you can just use
transform_coord(your-data).
polar <- tongue %>%
filter(speaker == "it01", X < 40) %>%
transform_coord()
#> The origin is x = 14.3901267816422, y = -65.2315420525847.The function returns a data set with two new columns:
radius and theta. It also prints the
calculated origin.
If you get an error relating to lm.fit, try to change
the fan_lines to values different from the default.
We can now plot the contours using polar coordinates in a cartesian system. Notice that the tip of the tongue is on the left (rather than the right, as in the original data).
polar %>%
ggplot(aes(angle, radius, colour = c2_place)) +
geom_point() +
scale_colour_discrete(name = "Place of C2") +
theme(legend.position = "top")Plotting in polar coordinates gives a sense of the actual shape of the tongue, but it is a bit trickier and it does not look very nice… (the tip is again on the left). (Thanks to Michele Gubian who has suggested a fix to the code).
polar %>%
ggplot(aes(angle, radius, colour = c2_place, group = rec_date)) +
geom_path() +
scale_colour_discrete(name = "Place of C2") +
coord_radial(theta = "x",
start = -0.5 * pi, end = 0.5 * pi,
direction = -1, expand = FALSE) +
scale_x_continuous(breaks = pi/4 * (0:4),
labels = expression(0, pi/4, pi/2, 3/4*pi, pi),
limits = c(0, pi)) +
ylim(0, 100) +
theme(legend.position = "top", axis.title = element_blank(),
panel.border = element_blank())