Skip to contents

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

When to Use ggprism

Perfect for:

  • Clinical Research: Professional biostatistics visualizations
  • Academic Publications: Journal-quality figure formatting
  • Scientific Presentations: Clear, impactful graphics for conferences
  • Data Communication: Effective statistical storytelling with visual appeal

Comparison with Standard ggplot2

  • ggprism: Authentic GraphPad Prism look, specialized scientific palettes
  • Standard ggplot2: General-purpose flexibility, custom styling required
  • Choose ggprism for: Scientific publications, clinical research, professional presentations

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
High-Impact Palettes
  • candy_bright: 9 vibrant, high-contrast colors for clear distinction
  • neon: 9 bright, attention-grabbing colors for presentations
  • flames: 9 warm colors ranging from red to orange
Accessibility Palettes
  • colorblind_safe: 6 carefully selected colors accessible to colorblind viewers
  • viridis: 6 perceptually uniform colors following viridis principles
  • pastels: 9 soft, muted colors ideal for subtle differences

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:

  1. X-axis Variable: Categorical or continuous variable
  2. Y-axis Variable: Continuous variable for analysis
  3. Optional Grouping Variable: Categories for color coding and statistics
  4. 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:

  1. Open jamovi and load your dataset
  2. Navigate to Exploration → ClinicoPath Descriptive Plots → GraphPad Prism Style Plots
  3. 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
  4. 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")

When to Choose ggprism

Use ggprism for:

  • Scientific publications requiring GraphPad Prism aesthetics
  • Clinical research presentations
  • Biostatistics reporting
  • Academic conference posters
  • Professional scientific communication

Use base ggplot2 for:

  • Custom visualization requirements
  • Non-scientific contexts
  • Unique styling needs
  • Complex multi-layer plots
  • Custom statistical overlays

Best Practices and Guidelines

Design Principles

  1. Choose Appropriate Palettes: Match colors to your scientific context
  2. Use Statistical Tests Wisely: Ensure tests are appropriate for your data
  3. Consider Accessibility: Use colorblind-safe palettes when possible
  4. Publication Standards: Use publication mode for journal submissions
  5. 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

  1. Choose the Right Palette: Match colors to your scientific context and audience
  2. Use Statistical Features: Leverage automated testing for robust analysis
  3. Consider Accessibility: Use colorblind-safe palettes for inclusive design
  4. Publication Mode: Enable for journal-quality output
  5. Validate Your Data: Ensure proper data structure and handle missing values

Next Steps

  1. Experiment with different plot types and color palettes
  2. Integrate with other ClinicoPath functions for comprehensive analysis
  3. Customize styling for your specific publication requirements
  4. Export high-quality plots for presentations and manuscripts

Additional Resources

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.