# \donttest{
# Attach packages
library(rearrr)
library(dplyr)
library(purrr)
has_ggplot <- require(ggplot2) # Attach if installed
# Set seed
set.seed(1)
# Create a data frame
df <- data.frame(
"y" = runif(200),
"g" = factor(rep(1:5, each = 40))
)
# Circularize 'y'
df_circ <- circularize(df, y_col = "y")
df_circ
# Plot circle
if (has_ggplot){
df_circ %>%
ggplot(aes(x = .circle_x, y = y, color = .degrees)) +
geom_point() +
theme_minimal()
}
#
# Grouped circularization
#
# Circularize 'y' for each group
# First cluster the groups a bit to move the
# circles away from each other
df_circ <- df %>%
cluster_groups(
cols = "y",
group_cols = "g",
suffix = "",
overwrite = TRUE
) %>%
dplyr::group_by(g) %>%
circularize(
y_col = "y",
overwrite = TRUE
)
# Plot circles
if (has_ggplot){
df_circ %>%
ggplot(aes(x = .circle_x, y = y, color = g)) +
geom_point() +
theme_minimal()
}
#
# Specifying minimum value
#
# Specify minimum value manually
df_circ <- circularize(df, y_col = "y", .min = -2)
df_circ
# Plot circle
if (has_ggplot){
df_circ %>%
ggplot(aes(x = .circle_x, y = y, color = .degrees)) +
geom_point() +
theme_minimal()
}
#
# Multiple circles by contraction
#
# Start by circularizing 'y'
df_circ <- circularize(df, y_col = "y")
# Contract '.circle_x' and 'y' towards the centroid
# To contract with multiple multipliers at once,
# we wrap the call in purrr::map_dfr
df_expanded <- purrr::map_dfr(
.x = 1:10 / 10,
.f = function(mult) {
expand_distances(
data = df_circ,
cols = c(".circle_x", "y"),
multiplier = mult,
origin_fn = centroid,
overwrite = TRUE
)
}
)
df_expanded
if (has_ggplot){
df_expanded %>%
ggplot(aes(
x = .circle_x_expanded, y = y_expanded,
color = .degrees, alpha = .multiplier
)) +
geom_point() +
theme_minimal()
}
# }
Run the code above in your browser using DataLab