Nothing
# Quick Visual Check Script for tf_ggplot Development
# Run this to quickly test and view tf_ggplot functionality during development
# Load required libraries
library(ggplot2)
# Source tf_ggplot functions (adjust path as needed)
# source("R/tf-ggplot.R") # Uncomment when implemented
# Quick test data generator
quick_test_data <- function(n_funcs = 3, pattern = "random") {
set.seed(123)
data <- data.frame(
id = seq_len(n_funcs),
group = factor(sample(c("A", "B"), n_funcs, replace = TRUE))
)
arg_vals <- seq(0, 2 * pi, length.out = 51)
if (pattern == "random") {
data$func <- tf_rgp(n_funcs, arg = arg_vals)
} else if (pattern == "trig") {
func_vals <- list(
sin(arg_vals),
cos(arg_vals),
sin(2 * arg_vals)
)[seq_len(n_funcs)]
data$func <- tfd(func_vals, arg = arg_vals)
} else if (pattern == "poly") {
func_vals <- list(
arg_vals,
arg_vals^2,
arg_vals^3
)[seq_len(n_funcs)]
data$func <- tfd(func_vals, arg = arg_vals)
}
return(data)
}
# Quick visual tests - run these individually during development
test_basic_line <- function() {
cat("Testing: Basic line plot\n")
data <- quick_test_data(3, "trig")
# Test current approach
p1 <- ggplot(data, aes(y = func, color = group)) +
geom_spaghetti() +
labs(title = "Current: geom_spaghetti") +
theme_minimal()
# Test new approach (will fail until implemented)
tryCatch(
{
p2 <- tf_ggplot(data, aes(tf = func, color = group)) +
geom_line() +
labs(title = "New: tf_ggplot + geom_line") +
theme_minimal()
print(p1)
Sys.sleep(2) # Brief pause between plots
print(p2)
cat("✓ Basic line plot test passed\n")
return(list(current = p1, new = p2))
},
error = function(e) {
cat("✗ tf_ggplot not yet implemented:", e$message, "\n")
print(p1)
cat("Showing current geom_spaghetti for reference\n")
return(list(current = p1, new = NULL))
}
)
}
test_ribbon_plot <- function() {
cat("Testing: Ribbon/confidence band plot\n")
# Create confidence band data
set.seed(456)
data <- data.frame(method = c("A", "B"))
arg_vals <- seq(0, 5, length.out = 26)
mean_vals1 <- 2 * exp(-arg_vals / 2) * cos(arg_vals)
mean_vals2 <- 1.5 * exp(-arg_vals / 3) * sin(arg_vals * 1.2)
sd1 <- rep(0.3, 26)
sd2 <- rep(0.25, 26)
data$mean_func <- tfd(list(mean_vals1, mean_vals2), arg = arg_vals)
data$lower_func <- tfd(
list(mean_vals1 - 1.96 * sd1, mean_vals2 - 1.96 * sd2),
arg = arg_vals
)
data$upper_func <- tfd(
list(mean_vals1 + 1.96 * sd1, mean_vals2 + 1.96 * sd2),
arg = arg_vals
)
tryCatch(
{
p <- tf_ggplot(data, aes(color = method, fill = method)) +
geom_ribbon(
aes(tf_ymin = lower_func, tf_ymax = upper_func),
alpha = 0.3
) +
geom_line(aes(tf = mean_func), size = 1) +
labs(title = "tf_ggplot: Confidence Bands") +
theme_minimal()
print(p)
cat("✓ Ribbon plot test passed\n")
return(p)
},
error = function(e) {
cat("✗ tf_ggplot ribbon test failed:", e$message, "\n")
# Show what it should look like with manual transformation
cat("This is what the ribbon plot should look like...\n")
# Manual transformation for reference
data_long <- tf_unnest(data, mean_func)
data_bands <- tf_unnest(data, c(lower_func, upper_func))
p_ref <- ggplot() +
geom_ribbon(
data = data_bands,
aes(x = arg, ymin = lower_func, ymax = upper_func, fill = method),
alpha = 0.3
) +
geom_line(
data = data_long,
aes(x = arg, y = mean_func, color = method),
size = 1
) +
labs(title = "Reference: Manual transformation", x = "x", y = "f(x)") +
theme_minimal()
print(p_ref)
return(p_ref)
}
)
}
test_faceting <- function() {
cat("Testing: Faceted plot\n")
data <- expand.grid(
subject = 1:4,
condition = c("Control", "Treatment")
)
data$group <- factor(rep(c("A", "B"), 4))
# Create different patterns by condition
set.seed(789)
arg_vals <- seq(0, 10, length.out = 21)
func_vals <- map(seq_len(nrow(data)), function(i) {
base <- sin(arg_vals * 0.5) + rnorm(21, 0, 0.1)
if (data$condition[i] == "Treatment") {
base <- base * 1.5 + 0.5
}
base
})
data$func <- tfd(func_vals, arg = arg_vals)
tryCatch(
{
p <- tf_ggplot(data, aes(tf = func, color = group)) +
geom_line(alpha = 0.7) +
facet_wrap(~condition) +
labs(title = "tf_ggplot: Faceted Plot") +
theme_minimal()
print(p)
cat("✓ Faceting test passed\n")
return(p)
},
error = function(e) {
cat("✗ tf_ggplot faceting test failed:", e$message, "\n")
return(NULL)
}
)
}
test_multiple_aesthetics <- function() {
cat("Testing: Multiple aesthetics\n")
data <- expand.grid(
method = c("A", "B", "C"),
difficulty = c("Easy", "Hard")
)
data$performance <- runif(nrow(data))
set.seed(101112)
arg_vals <- seq(0, 10, length.out = 26)
func_vals <- map(seq_len(nrow(data)), function(i) {
base <- data$performance[i] * (1 - exp(-arg_vals / 3))
if (data$difficulty[i] == "Hard") base <- base * 0.7
base + rnorm(26, 0, 0.02)
})
data$learning_curve <- tfd(func_vals, arg = arg_vals)
tryCatch(
{
p <- tf_ggplot(
data,
aes(
tf = learning_curve,
color = method,
linetype = difficulty,
alpha = performance
)
) +
geom_line(size = 1) +
scale_alpha_continuous(range = c(0.4, 1.0)) +
labs(title = "tf_ggplot: Multiple Aesthetics") +
theme_minimal()
print(p)
cat("✓ Multiple aesthetics test passed\n")
return(p)
},
error = function(e) {
cat("✗ tf_ggplot multiple aesthetics test failed:", e$message, "\n")
return(NULL)
}
)
}
# Interactive test runner
run_interactive_tests <- function() {
cat("\n=== tf_ggplot Interactive Visual Tests ===\n\n")
tests <- list(
"1" = list(name = "Basic Line Plot", func = test_basic_line),
"2" = list(name = "Ribbon/Confidence Bands", func = test_ribbon_plot),
"3" = list(name = "Faceted Plot", func = test_faceting),
"4" = list(name = "Multiple Aesthetics", func = test_multiple_aesthetics),
"a" = list(name = "Run All Tests", func = function() {
test_basic_line()
test_ribbon_plot()
test_faceting()
test_multiple_aesthetics()
})
)
repeat {
cat("\nAvailable tests:\n")
for (key in names(tests)) {
cat(sprintf(" %s) %s\n", key, tests[[key]]$name))
}
cat(" q) Quit\n\n")
choice <- readline("Choose a test (1-4, a, q): ")
if (choice == "q") {
cat("Goodbye!\n")
break
}
if (choice %in% names(tests)) {
cat("\n", rep("=", 50), "\n")
result <- tests[[choice]]$func()
cat(rep("=", 50), "\n")
if (!is.null(result)) {
cat("Press Enter to continue...")
readline()
}
} else {
cat("Invalid choice. Please try again.\n")
}
}
}
# Development helpers
check_tf_functions <- function() {
cat("Checking for required tf functions...\n")
required_funcs <- c("tf_rgp", "tfd", "tf_unnest", "tf_evaluations", "tf_arg")
available <- sapply(required_funcs, exists)
for (i in seq_along(required_funcs)) {
status <- if (available[i]) "✓" else "✗"
cat(sprintf("%s %s\n", status, required_funcs[i]))
}
if (all(available)) {
cat("\n✓ All required tf functions are available.\n")
} else {
cat("\n✗ Some tf functions are missing. Load the tf/tidyfun packages.\n")
}
return(all(available))
}
check_ggplot_functions <- function() {
cat("Checking for ggplot2 functions...\n")
required_funcs <- c("ggplot", "aes", "geom_line", "geom_point", "geom_ribbon")
available <- sapply(required_funcs, exists)
for (i in seq_along(required_funcs)) {
status <- if (available[i]) "✓" else "✗"
cat(sprintf("%s %s\n", status, required_funcs[i]))
}
return(all(available))
}
# Print startup message
cat("\n=== tf_ggplot Quick Visual Check ===\n")
cat("Available functions:\n")
cat(" test_basic_line() # Test basic line plots\n")
cat(" test_ribbon_plot() # Test ribbon/confidence bands\n")
cat(" test_faceting() # Test faceted plots\n")
cat(" test_multiple_aesthetics() # Test complex aesthetics\n")
cat(" run_interactive_tests() # Interactive test menu\n")
cat(" check_tf_functions() # Check tf package availability\n")
cat(" check_ggplot_functions() # Check ggplot2 availability\n\n")
# Run basic checks
if (interactive()) {
check_tf_functions()
check_ggplot_functions()
cat("\nReady for testing! Try run_interactive_tests() to start.\n")
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.