GraphPad Prism Style Plots with ggprism
Publication-Ready Scientific Visualizations with Authentic Prism Styling
ClinicoPath Module
2025-07-13
Source:vignettes/clinicopath-descriptives-21-ggprism-comprehensive.Rmd
clinicopath-descriptives-21-ggprism-comprehensive.Rmd
Introduction to GraphPad Prism Style Plots
The ggprism
function in ClinicoPath brings the
professional look and feel of GraphPad Prism to R-based analysis
workflows. This function provides authentic Prism styling, comprehensive
color palettes, and publication-ready formatting for scientific
visualizations.
Key Features
- Authentic GraphPad Prism Styling: True-to-Prism themes and aesthetics
- 20+ Color Palettes: Professional scientific color schemes including colorblind-safe options
- Multiple Plot Types: Violin, box, scatter, column, and line plots
- Statistical Integration: Automated statistical tests with p-value annotations
- Publication Ready: High-quality formatting for journals and presentations
- Accessibility Features: Colorblind-safe palettes and best practices guidance
Package Setup and Data Loading
## Warning: replacing previous import 'dplyr::as_data_frame' by
## 'igraph::as_data_frame' when loading 'ClinicoPath'
## Warning: replacing previous import 'DiagrammeR::count_automorphisms' by
## 'igraph::count_automorphisms' when loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::groups' by 'igraph::groups' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'DiagrammeR::get_edge_ids' by
## 'igraph::get_edge_ids' when loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::union' by 'igraph::union' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::select' by 'jmvcore::select' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::union' by 'lubridate::union' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::%--%' by 'lubridate::%--%' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tnr' by 'mlr3measures::tnr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::precision' by
## 'mlr3measures::precision' when loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tn' by 'mlr3measures::tn' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fnr' by 'mlr3measures::fnr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tp' by 'mlr3measures::tp' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::npv' by 'mlr3measures::npv' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::ppv' by 'mlr3measures::ppv' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::auc' by 'mlr3measures::auc' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::tpr' by 'mlr3measures::tpr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fn' by 'mlr3measures::fn' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fp' by 'mlr3measures::fp' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::fpr' by 'mlr3measures::fpr' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::recall' by
## 'mlr3measures::recall' when loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::specificity' by
## 'mlr3measures::specificity' when loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::sensitivity' by
## 'mlr3measures::sensitivity' when loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::as_data_frame' by
## 'tibble::as_data_frame' when loading 'ClinicoPath'
## Warning: replacing previous import 'igraph::crossing' by 'tidyr::crossing' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'magrittr::extract' by 'tidyr::extract' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'mlr3measures::sensitivity' by
## 'caret::sensitivity' when loading 'ClinicoPath'
## Warning: replacing previous import 'mlr3measures::specificity' by
## 'caret::specificity' when loading 'ClinicoPath'
## Registered S3 methods overwritten by 'useful':
## method from
## autoplot.acf ggfortify
## fortify.acf ggfortify
## fortify.kmeans ggfortify
## fortify.ts ggfortify
## Warning: replacing previous import 'jmvcore::select' by 'dplyr::select' when
## loading 'ClinicoPath'
## Registered S3 methods overwritten by 'ggpp':
## method from
## heightDetails.titleGrob ggplot2
## widthDetails.titleGrob ggplot2
## Warning: replacing previous import 'DataExplorer::plot_histogram' by
## 'grafify::plot_histogram' when loading 'ClinicoPath'
## Warning: replacing previous import 'dplyr::select' by 'jmvcore::select' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'mlr3measures::auc' by 'pROC::auc' when
## loading 'ClinicoPath'
## Warning: replacing previous import 'cutpointr::roc' by 'pROC::roc' when loading
## 'ClinicoPath'
## Warning: replacing previous import 'tibble::view' by 'summarytools::view' when
## loading 'ClinicoPath'
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(knitr)
# Load comprehensive ggprism test datasets
data("clinical_prism_data")
data("dose_response_prism_data")
data("time_course_prism_data")
data("statistical_comparison_data")
data("biomarker_expression_data")
data("pharmacokinetics_data")
data("colorblind_safe_data")
data("minimal_prism_data")
data("large_prism_dataset")
data("publication_prism_data")
data("comprehensive_prism_data")
Basic GraphPad Prism Plots
Clinical Trial Violin Plot
Let’s start with a basic clinical trial analysis:
# Display the clinical data structure
knitr::kable(head(clinical_prism_data),
caption = "Clinical Trial Data Structure")
# Create a Prism-style violin plot
clinical_violin <- ggprism(
data = clinical_prism_data,
x_var = "treatment_group",
y_var = "biomarker_level",
group_var = "patient_type",
plot_type = "violin",
prism_theme = "default",
prism_palette = "floral",
plot_title = "Biomarker Levels by Treatment Group",
x_label = "Treatment Group",
y_label = "Biomarker Level (ng/mL)",
show_statistics = TRUE,
show_summary = TRUE,
show_points = TRUE
)
This creates a professional violin plot showing: - Distribution shapes: Full data distribution for each group - Statistical comparisons: Automated p-value annotations - Individual points: Raw data overlay with jittering - Summary statistics: Detailed descriptive statistics table
Box Plot with Error Bars
# Create a Prism-style box plot
clinical_box <- ggprism(
data = clinical_prism_data,
x_var = "treatment_group",
y_var = "biomarker_level",
group_var = "patient_type",
plot_type = "boxplot",
prism_theme = "publication",
prism_palette = "office",
plot_title = "Clinical Trial Results",
error_bars = "se",
stats_method = "auto",
pvalue_format = "exact",
base_size = 14
)
Advanced Plot Types
Dose-Response Analysis
# Display dose-response data
knitr::kable(head(dose_response_prism_data),
caption = "Dose-Response Data Structure")
# Create dose-response scatter plot
dose_response_scatter <- ggprism(
data = dose_response_prism_data,
x_var = "dose_concentration",
y_var = "response_percentage",
group_var = "compound_type",
plot_type = "scatter",
prism_theme = "white",
prism_palette = "viridis",
plot_title = "Dose-Response Curves",
x_label = "Dose Concentration (μM)",
y_label = "Response (%)",
point_size = 2.5,
point_alpha = 0.7,
show_statistics = TRUE
)
Time Course Analysis
# Display time course data
knitr::kable(head(time_course_prism_data),
caption = "Time Course Data Structure")
# Create time course line plot
time_course_line <- ggprism(
data = time_course_prism_data,
x_var = "time_point",
y_var = "expression_level",
group_var = "treatment_condition",
plot_type = "line",
prism_theme = "minimal",
prism_palette = "candy_bright",
plot_title = "Gene Expression Time Course",
x_label = "Time (hours)",
y_label = "Expression Level (fold change)",
show_points = TRUE,
show_statistics = FALSE
)
Column Plot with Error Bars
# Create column plot for summary data
column_plot <- ggprism(
data = statistical_comparison_data,
x_var = "disease_stage",
y_var = "survival_months",
group_var = "tumor_grade",
plot_type = "column",
prism_theme = "publication",
prism_palette = "blueprint",
plot_title = "Survival by Disease Stage",
x_label = "Disease Stage",
y_label = "Survival (months)",
error_bars = "se",
show_statistics = TRUE,
stats_method = "anova"
)
Color Palette Showcase
Available Prism Palettes
# Test all major color palettes
palette_examples <- c("floral", "candy_bright", "office", "pastels",
"colorblind_safe", "blueprint", "viridis", "ocean")
for (palette in palette_examples) {
cat("Testing palette:", palette, "\n")
palette_plot <- ggprism(
data = biomarker_expression_data,
x_var = "gene_target",
y_var = "fold_change",
group_var = "experiment_type",
plot_type = "violin",
prism_palette = palette,
plot_title = paste("Palette Demo:", stringr::str_to_title(palette)),
show_summary = FALSE,
show_statistics = FALSE
)
}
Palette Descriptions
Professional Palettes
- floral: 12 nature-inspired colors perfect for biological data
- office: 9 professional colors suitable for corporate presentations
- blueprint: 9 blue-toned colors for technical themes
Palette Preview Mode
# Enable palette preview to see all colors
preview_demo <- ggprism(
data = biomarker_expression_data,
x_var = "gene_target",
y_var = "fold_change",
plot_type = "boxplot",
prism_palette = "stained_glass",
preview_mode = TRUE,
plot_title = "Biomarker Expression Analysis"
)
Statistical Analysis Features
Automatic Statistical Testing
# Display statistical comparison data
knitr::kable(head(statistical_comparison_data),
caption = "Multi-Group Statistical Data")
# Automatic test selection based on data
auto_stats <- ggprism(
data = statistical_comparison_data,
x_var = "disease_stage",
y_var = "survival_months",
group_var = "tumor_grade",
plot_type = "violin",
prism_theme = "publication",
prism_palette = "colorblind_safe",
show_statistics = TRUE,
stats_method = "auto", # Automatic method selection
pvalue_format = "exact",
plot_title = "Survival Analysis by Disease Stage",
show_summary = TRUE
)
Manual Statistical Method Selection
# Test specific statistical methods
statistical_methods <- c("ttest", "wilcoxon", "anova", "kruskal")
for (method in statistical_methods) {
cat("Testing method:", method, "\n")
method_plot <- ggprism(
data = statistical_comparison_data,
x_var = "disease_stage",
y_var = "survival_months",
group_var = "tumor_grade",
plot_type = "boxplot",
stats_method = method,
pvalue_format = "scientific",
plot_title = paste("Statistical Method:", toupper(method))
)
}
P-value Formatting Options
# Different p-value display formats
pvalue_formats <- c("exact", "scientific", "stars", "symbols")
for (format in pvalue_formats) {
format_plot <- ggprism(
data = statistical_comparison_data,
x_var = "disease_stage",
y_var = "survival_months",
group_var = "tumor_grade",
plot_type = "violin",
show_statistics = TRUE,
pvalue_format = format,
plot_title = paste("P-value Format:", format)
)
}
Publication-Ready Features
Publication Mode
# Display publication data
knitr::kable(head(publication_prism_data),
caption = "Publication Example Data")
# Create publication-ready plot
publication_plot <- ggprism(
data = publication_prism_data,
x_var = "experimental_group",
y_var = "cell_viability_percent",
group_var = "experiment_replicate",
plot_type = "violin",
prism_theme = "publication",
prism_palette = "colorblind_safe",
plot_title = "Cell Viability Analysis",
x_label = "Treatment Condition",
y_label = "Cell Viability (%)",
publication_ready = TRUE,
export_dpi = 300,
base_size = 14,
show_statistics = TRUE,
show_summary = TRUE
)
Faceted Analysis
# Create faceted plot
faceted_plot <- ggprism(
data = publication_prism_data,
x_var = "experimental_group",
y_var = "cell_viability_percent",
group_var = "experiment_replicate",
facet_var = "culture_conditions",
plot_type = "boxplot",
prism_theme = "white",
prism_palette = "ocean",
plot_title = "Cell Viability by Culture Conditions",
show_statistics = TRUE,
error_bars = "ci"
)
Real-World Applications
Pharmacokinetics Analysis
# Display PK data
knitr::kable(head(pharmacokinetics_data),
caption = "Pharmacokinetics Data Structure")
# Create PK profile plot
pk_profile <- ggprism(
data = pharmacokinetics_data,
x_var = "time_hours",
y_var = "concentration_ng_ml",
group_var = "formulation",
plot_type = "line",
prism_theme = "publication",
prism_palette = "office",
plot_title = "Pharmacokinetic Profile Comparison",
x_label = "Time (hours)",
y_label = "Plasma Concentration (ng/mL)",
show_points = TRUE,
point_size = 2.0,
show_statistics = FALSE,
base_size = 12
)
Biomarker Expression Analysis
# Create biomarker expression plot
biomarker_plot <- ggprism(
data = biomarker_expression_data,
x_var = "gene_target",
y_var = "fold_change",
group_var = "experiment_type",
facet_var = "sample_condition",
plot_type = "violin",
prism_theme = "white",
prism_palette = "viridis",
plot_title = "Gene Expression Analysis",
x_label = "Gene Targets",
y_label = "Fold Change (log2)",
show_statistics = TRUE,
stats_method = "auto",
show_points = TRUE,
point_alpha = 0.6
)
Accessibility and Best Practices
Colorblind-Safe Visualization
# Display accessibility data
knitr::kable(head(colorblind_safe_data),
caption = "Accessibility Test Data")
# Create colorblind-safe plot
accessible_plot <- ggprism(
data = colorblind_safe_data,
x_var = "category",
y_var = "measurement_value",
group_var = "accessibility_group",
plot_type = "scatter",
prism_palette = "colorblind_safe",
plot_title = "Colorblind-Safe Visualization",
prism_shape_palette = "filled",
point_size = 3.0,
show_statistics = TRUE
)
Shape Palette Options
# Test different shape palettes for scatter plots
shape_palettes <- c("default", "prism", "filled", "open")
for (shape_palette in shape_palettes) {
shape_plot <- ggprism(
data = colorblind_safe_data,
x_var = "category",
y_var = "measurement_value",
group_var = "accessibility_group",
plot_type = "scatter",
prism_shape_palette = shape_palette,
plot_title = paste("Shape Palette:", shape_palette),
point_size = 2.5,
point_alpha = 0.8
)
}
Advanced Customization
Theme Variations
# Test all Prism theme variants
prism_themes <- c("default", "white", "minimal", "publication")
for (theme in prism_themes) {
theme_plot <- ggprism(
data = clinical_prism_data,
x_var = "treatment_group",
y_var = "biomarker_level",
group_var = "patient_type",
plot_type = "violin",
prism_theme = theme,
prism_palette = "floral",
plot_title = paste("Prism Theme:", stringr::str_to_title(theme))
)
}
Error Bar Types
# Test different error bar types
error_types <- c("none", "se", "sd", "ci")
for (error_type in error_types) {
error_plot <- ggprism(
data = clinical_prism_data,
x_var = "treatment_group",
y_var = "biomarker_level",
plot_type = "column",
error_bars = error_type,
plot_title = paste("Error Bars:", toupper(error_type)),
prism_palette = "pastels"
)
}
Advanced Prism Guides
# Test advanced Prism axis guides
guide_types <- c("standard", "minor", "offset", "offset_minor", "bracket")
for (guide_type in guide_types) {
guide_plot <- ggprism(
data = biomarker_expression_data,
x_var = "gene_target",
y_var = "fold_change",
plot_type = "boxplot",
prism_guides = guide_type,
plot_title = paste("Prism Guides:", stringr::str_to_title(guide_type)),
prism_palette = "blueprint"
)
}
Data Structure Requirements
Basic Requirements
For ggprism to work properly, your data must contain:
- X-axis Variable: Categorical or continuous variable
- Y-axis Variable: Continuous variable for analysis
- Optional Grouping Variable: Categories for color coding and statistics
- Optional Faceting Variable: Categories for panel creation
# Example of minimal data structure
minimal_example <- data.frame(
treatment = c("Control", "Treatment"),
response = c(10, 15),
group = c("A", "A")
)
knitr::kable(minimal_example,
caption = "Minimal Data Structure for ggprism")
# Create minimal plot
minimal_plot <- ggprism(
data = minimal_example,
x_var = "treatment",
y_var = "response",
group_var = "group",
plot_type = "scatter",
prism_palette = "floral"
)
Data Validation Function
# Function to validate ggprism data
validate_ggprism_data <- function(data, x_var, y_var, group_var = NULL) {
issues <- c()
# Check required variables exist
if (!x_var %in% names(data)) {
issues <- c(issues, paste("Missing 'x' variable:", x_var))
}
if (!y_var %in% names(data)) {
issues <- c(issues, paste("Missing 'y' variable:", y_var))
}
# Check optional grouping variable
if (!is.null(group_var) && !group_var %in% names(data)) {
issues <- c(issues, paste("Missing 'group' variable:", group_var))
}
# Check for missing values
if (x_var %in% names(data)) {
missing_x <- sum(is.na(data[[x_var]]))
if (missing_x > 0) {
issues <- c(issues, paste("Missing values in x variable:", missing_x))
}
}
if (y_var %in% names(data)) {
missing_y <- sum(is.na(data[[y_var]]))
if (missing_y > 0) {
issues <- c(issues, paste("Missing values in y variable:", missing_y))
}
}
# Check data types
if (y_var %in% names(data) && !is.numeric(data[[y_var]])) {
issues <- c(issues, "Y variable must be numeric")
}
return(issues)
}
# Example validation
validation_result <- validate_ggprism_data(
clinical_prism_data,
"treatment_group",
"biomarker_level",
"patient_type"
)
if (length(validation_result) == 0) {
cat("✓ Data validation passed successfully\n")
} else {
cat("✗ Data validation issues:\n")
for (issue in validation_result) {
cat(" -", issue, "\n")
}
}
Large Dataset Performance
Performance Testing
# Display large dataset structure
cat("Large dataset dimensions:", dim(large_prism_dataset), "\n")
knitr::kable(head(large_prism_dataset),
caption = "Large Dataset Sample")
# Performance test with large dataset
performance_plot <- ggprism(
data = large_prism_dataset,
x_var = "treatment",
y_var = "outcome_score",
group_var = "patient_subgroup",
plot_type = "violin",
prism_theme = "minimal",
prism_palette = "viridis",
plot_title = "Large Dataset Performance Test",
show_statistics = FALSE, # Disable for performance
show_summary = TRUE,
show_points = FALSE # Disable for performance
)
Integration with jamovi
Using ggprism in jamovi
The ggprism function integrates seamlessly with jamovi:
- Open jamovi and load your dataset
- Navigate to Exploration → ClinicoPath Descriptive Plots → GraphPad Prism Style Plots
-
Configure your plot:
- Select ‘X-Axis Variable’ (categorical or continuous)
- Select ‘Y-Axis Variable’ (continuous)
- Optionally select ‘Grouping Variable’ for comparisons
- Optionally select ‘Faceting Variable’ for panels
- Choose plot type and customize styling
-
Review outputs:
- Professional Prism-style plot
- Summary statistics (if enabled)
- Statistical test results (if enabled)
- Style guide and palette information
- Accessibility notes and best practices
Data Preparation for jamovi
# Example of preparing data for jamovi ggprism
jamovi_ready_data <- data.frame(
dose_level = c("0 μM", "1 μM", "10 μM", "100 μM"),
cell_response = c(5, 25, 65, 95),
compound_id = c("A", "A", "A", "A"),
replicate_id = 1:4
)
knitr::kable(jamovi_ready_data,
caption = "Data Structure Ready for jamovi ggprism")
Comparison with Other Visualization Methods
ggprism vs. Base ggplot2
comparison_features <- data.frame(
Feature = c("Styling", "Color Palettes", "Statistical Tests",
"Scientific Themes", "Learning Curve", "Customization", "Use Case"),
ggprism = c("Authentic Prism", "20+ Scientific palettes", "Automated",
"Publication themes", "Easy", "Prism-focused", "Scientific publications"),
Base_ggplot2 = c("General purpose", "Basic + viridis", "Manual",
"Minimal themes", "Moderate", "Unlimited", "General visualization"),
stringsAsFactors = FALSE
)
knitr::kable(comparison_features,
caption = "Feature Comparison: ggprism vs. Base ggplot2")
Best Practices and Guidelines
Design Principles
- Choose Appropriate Palettes: Match colors to your scientific context
- Use Statistical Tests Wisely: Ensure tests are appropriate for your data
- Consider Accessibility: Use colorblind-safe palettes when possible
- Publication Standards: Use publication mode for journal submissions
- Clear Labels: Provide descriptive titles and axis labels
Common Usage Patterns
# Pattern 1: Clinical trial analysis
clinical_pattern <- ggprism(
data = clinical_prism_data,
x_var = "treatment_group",
y_var = "biomarker_level",
group_var = "patient_type",
plot_type = "violin",
prism_palette = "colorblind_safe",
show_statistics = TRUE,
publication_ready = TRUE
)
# Pattern 2: Dose-response analysis
dose_pattern <- ggprism(
data = dose_response_prism_data,
x_var = "dose_concentration",
y_var = "response_percentage",
group_var = "compound_type",
plot_type = "scatter",
prism_theme = "publication"
)
# Pattern 3: Time course analysis
time_pattern <- ggprism(
data = time_course_prism_data,
x_var = "time_point",
y_var = "expression_level",
group_var = "treatment_condition",
plot_type = "line",
show_points = TRUE
)
Troubleshooting Common Issues
Data Issues
# Issue 1: Missing values
missing_test_data <- data.frame(
group = c("A", "B", "C", NA),
value = c(10, NA, 15, 20),
category = c("X", "Y", "X", "Y")
)
# ggprism handles missing values by removing incomplete cases
missing_plot <- ggprism(
data = missing_test_data,
x_var = "group",
y_var = "value",
group_var = "category",
plot_type = "boxplot"
)
# Issue 2: Single group data
single_group_data <- data.frame(
condition = rep("Treatment", 10),
response = rnorm(10, mean = 20, sd = 3)
)
# Works without grouping variable
single_plot <- ggprism(
data = single_group_data,
x_var = "condition",
y_var = "response",
plot_type = "violin",
show_statistics = FALSE
)
Package Dependencies
# Check if ggprism package is available
if (requireNamespace("ggprism", quietly = TRUE)) {
cat("✓ ggprism package is available\n")
} else {
cat("✗ ggprism package not found\n")
cat("Install with: install.packages('ggprism')\n")
}
# The function provides graceful fallbacks if packages are missing
fallback_plot <- ggprism(
data = clinical_prism_data,
x_var = "treatment_group",
y_var = "biomarker_level",
plot_type = "violin"
)
Conclusion
The ClinicoPath ggprism function provides a powerful solution for creating publication-ready scientific visualizations with authentic GraphPad Prism styling. Key advantages include:
✅ Professional Aesthetics: Authentic Prism look and
feel for scientific publications
✅ Comprehensive Palettes: 20+ carefully designed color
schemes including accessibility options
✅ Statistical Integration: Automated statistical
testing with appropriate method selection
✅ Publication Ready: High-quality formatting optimized
for journals and presentations
✅ jamovi Integration: Seamless interface with
interactive parameter adjustment
✅ Accessibility Focus: Colorblind-safe options and
best practices guidance
Key Takeaways
- Choose the Right Palette: Match colors to your scientific context and audience
- Use Statistical Features: Leverage automated testing for robust analysis
- Consider Accessibility: Use colorblind-safe palettes for inclusive design
- Publication Mode: Enable for journal-quality output
- Validate Your Data: Ensure proper data structure and handle missing values
Next Steps
- Experiment with different plot types and color palettes
- Integrate with other ClinicoPath functions for comprehensive analysis
- Customize styling for your specific publication requirements
- Export high-quality plots for presentations and manuscripts
Additional Resources
- ggprism Package Documentation
- GraphPad Prism Style Guide
- ClinicoPath Documentation
- Colorblind-Safe Visualization Guidelines
For advanced scientific visualization workflows and integration with other statistical analyses, explore the complete ClinicoPath vignette series.
This vignette demonstrates the professional capabilities of the ClinicoPath ggprism function for creating publication-ready scientific visualizations with authentic GraphPad Prism styling.