Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export(acro_glm)
export(acro_hist)
export(acro_init)
export(acro_lm)
export(acro_pie)
export(acro_pivot_table)
export(acro_print_outputs)
export(acro_remove_output)
Expand Down
2 changes: 1 addition & 1 deletion R/acro_init.R
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Globals -----------------------------------------------------------------
acro_venv <- "r-acro"
acro_pkg <- "acro==0.4.12"
acro_pkg <- "acro==1.0.1"
ch <- "conda-forge"


Expand Down
72 changes: 72 additions & 0 deletions R/acro_tables.R
Original file line number Diff line number Diff line change
Expand Up @@ -379,3 +379,75 @@ acro_surv_func <- function(time, status, output, filename = "kaplan-meier.png")
}
return(results)
}

#' Pie chart
#'
#' @param data The object holding the data.
#' @param column The name of the column that will be used to plot the pie chart.
#' @param radius The radius of the pie chart.
#' @param clockwise logical indicating if slices are drawn clockwise or counter clockwise.
#' @param init.angle number specifying the starting angle (in degrees) for the slices. Defaults to 0 (i.e., ‘3 o'clock’) unless clockwise is true where init.angle defaults to 90 (degrees), (i.e., ‘12 o'clock’).
#' @param col colors to be used in filling or shading the slices
#' @param border The color to draw the border.
#' @param lty The line style.
#' @param filename The name of the file where the pie chart will be saved.
#' @param ... Any other parameters.
#'
#' @returns The pie chart
#' @export

acro_pie <- function(data, column, radius = 0.8, clockwise = FALSE, init.angle = if (clockwise) 90 else 0, col = NULL, border = NULL, lty = NULL, filename = "pie.png", ...) {
if (is.null(acroEnv$ac)) {
stop("ACRO has not been initialised. Please first call acro_init()")
}

# Check for any unused arguments
if (length(list(...)) > 0) {
warning("Unused arguments were provided: ", paste0(names(list(...)), collapse = ", "), "\n", "Please use the help command to learn more about the function.")
}

# If labels is NULL, try to extract names or levels from the data column
# This is commented because acro version 1.0.1 does not accept custom labels
# if (is.null(labels)) {
# labels <- unique(data[[column]])
# }

# Handle the boarder and lty parameters
wedgeprops <- NULL

if (!is.null(border)) {
wedgeprops <- list()
wedgeprops$edgecolor <- border
}

if (!is.null(lty)) {
if (identical(lty, 0) || lty == "blank") {
wedgeprops$linestyle <- "none"
} else {
lty_map <- c("solid", "dashed", "dotted", "dashdot")
if (is.numeric(lty)) {
if (lty >= 1 && lty <= length(lty_map)) {
wedgeprops$linestyle <- lty_map[lty]
} else {
warning("Unsupported line type:", lty, ". Defaulting to solid.")
wedgeprops$linestyle <- "solid"
}
} else if (is.character(lty)) {
if (lty %in% c("solid", "dashed", "dotted", "dotdash", "none")) {
wedgeprops$linestyle <- lty
} else {
warning(paste("Unsupported line type:", lty, ". Defaulting to solid."))
wedgeprops$linestyle <- "solid"
}
}
}
}

py_pie <- acroEnv$ac$pie(data = data, column = column, radius = radius, counterclock = !clockwise, startangle = init.angle, colors = col, wedgeprops = wedgeprops, filename = filename)
r_pie <- reticulate::py_to_r(py_pie)

# Load the saved pie
image <- png::readPNG(r_pie)
grid::grid.raster(image)
return(r_pie)
}
1 change: 1 addition & 0 deletions inst/WORDLIST
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ https
initialised
json
numpy
o'clock’
openml
pre
programme
Expand Down
46 changes: 46 additions & 0 deletions man/acro_pie.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 51 additions & 0 deletions tests/testthat/test-acro_pie.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
test_that("acro_pie without initialising ACRO object first", {
acroEnv$ac <- NULL
expect_error(acro_pie(nursery_data, "children"), "ACRO has not been initialised. Please first call acro_init()")
})

test_that("acro_pie works", {
testthat::skip_on_cran()
acro_init()
filename <- acro_pie(nursery_data, "children")
expect_true(file.exists(filename))
})

test_that("acro_pie gives a warning on unused arguments", {
expect_warning(
acro_pie(data = nursery_data, column = "children", fake_arg = 123),
"Unused arguments were provided"
)
})

test_that("acro_pie handles the border parameter", {
result <- acro_pie(
data = nursery_data,
column = "children",
border = "red",
)

expect_true(file.exists(result))
})

test_that("acro_pie handles the line (lty) parameter", {
expect_silent(acro_pie(data = nursery_data, column = "children", lty = 0))
expect_silent(acro_pie(data = nursery_data, column = "children", lty = "blank"))

expect_silent(acro_pie(data = nursery_data, column = "children", lty = 2))
expect_silent(acro_pie(data = nursery_data, column = "children", lty = "dashed"))

# Test invalid numeric lty
expect_warning(
acro_pie(data = nursery_data, column = "children", lty = 99),
"Unsupported line type"
)

# Test invalid string lty
expect_warning(
acro_pie(data = nursery_data, column = "children", lty = "invalid_style"),
"Unsupported line type"
)
})

# Delete the acro_artifacts folder
unlink("acro_artifacts", recursive = TRUE)
Loading