Transform spline coordinates between cartesian and polar

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  out.width = "300px", fig.align = "center", dpi = 300
)
library(dplyr)
library(ggplot2)
theme_set(theme_bw())
library(rticulate)

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

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") %>%
    transform_coord()

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).

polar %>%
    ggplot(aes(angle, radius, colour = c2_place)) +
    geom_point(alpha = 0.5) +
    scale_colour_discrete(name = "Place of C2") +
    coord_polar(start = pi) +
    xlim(min(polar$angle) - pi / 2, max(polar$angle) + pi / 2) +
    ylim(0, max(polar$radius)) +
    theme_void() +
    theme(legend.position = "top")


Try the rticulate package in your browser

Any scripts or data that you put into this service are public.

rticulate documentation built on Sept. 4, 2022, 5:07 p.m.