GGenemy audits your ggplot2 visualizations to ensure they are:
Think of it as a linter for data visualization!
Let’s create a plot with some accessibility issues:
# A plot using red and green (problematic for colorblind users)
problematic_plot <- ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) +
geom_point(size = 2) +
scale_color_manual(values = c("red", "green", "blue"))
problematic_plotNow audit it:
report <- gg_audit(problematic_plot)
print(report)
#>
#> === GGenemy Audit Report ===
#>
#> Plot Type: GeomPoint
#> Layers: 1
#>
#> CRITICAL ISSUES (2):
#> 1. [color] Red-green color combination detected (problematic for 8% of males with deuteranopia/protanopia)
#> 2. [labels] Label 'factor(cyl)' contains programming syntax
#>
#> WARNINGS (3):
#> 1. [color] Some colors have low contrast - may be hard to distinguish
#> 2. [scales] Unusual aspect ratio (6.01) may distort perception of relationships
#> 3. [labels] Plot has no title
#>
#> SUGGESTIONS:
#> - Use colorblind-safe palettes: viridis::scale_color_viridis() or RColorBrewer
#> - Consider using coord_fixed() for appropriate aspect ratio
#> - White backgrounds work well, but ensure sufficient contrast with data elements
#> - Add a descriptive title: labs(title = 'Your Title Here')
#> - Clean up label: labs(colour = 'Human Readable Name')
#>
#> Run gg_suggest_fixes() for code recommendations.Check for color issues specifically:
gg_audit_color(problematic_plot)
#> $issues
#> [1] "Red-green color combination detected (problematic for 8% of males with deuteranopia/protanopia)"
#>
#> $warnings
#> [1] "Some colors have low contrast - may be hard to distinguish"
#>
#> $suggestions
#> [1] "Use colorblind-safe palettes: viridis::scale_color_viridis() or RColorBrewer"The red-green combination is a problem! Let’s simulate how a colorblind user sees it:
# Deuteranopia (most common type of colorblindness)
gg_simulate_cvd(problematic_plot, type = "deutan")
#> Simulating deutan color vision deficiency...
#> Original colors: green, red, blue
#> Simulated colors: #EFD63A, #A39000, #003DFBSee how the red and green look very similar?
gg_suggest_fixes(problematic_plot)
#>
#> ====================================
#> GGenemy Fix Suggestions
#> ====================================
#>
#> Copy and add these layers to your plot:
#>
#> your_plot <- ggplot(...) +
#> geom_*(...) +
#>
#> # COLOR FIXES
#> # Replace with colorblind-safe palette
#> scale_color_viridis_d(option = 'plasma') +
#> # Use high-contrast palette
#> scale_color_brewer(palette = 'Set1') +
#>
#> # SCALE FIXES
#> # Fix aspect ratio
#> coord_fixed(ratio = 1) +
#>
#> # LABEL FIXES
#> # Clean up labels - replace with human-readable text
#> labs(
#> x = 'Descriptive X Label',
#> y = 'Descriptive Y Label',
#> color = 'Group Name'
#> ) +
#> # Add descriptive title
#> labs(title = 'Your Descriptive Title Here') +
#>
#> theme_minimal() # Optional: clean theme
#>
#> ====================================
#> Manual Fixes Required:
#> ====================================
#> 1. Replace programming syntax in labels with descriptive text
#> 2. Add a descriptive title
#>
#> TIP: Use auto_fix = TRUE to automatically apply some fixes:
#> fixed_plot <- gg_suggest_fixes(your_plot, auto_fix = TRUE)Here’s an improved version:
improved_plot <- ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) +
geom_point(size = 3) +
scale_color_viridis_d(option = "plasma") +
labs(
title = "Car Weight vs Fuel Efficiency",
x = "Weight (1000 lbs)",
y = "Miles Per Gallon",
color = "Cylinders"
) +
theme_minimal()
improved_plotCheck it:
gg_audit(improved_plot)
#>
#> === GGenemy Audit Report ===
#>
#> Plot Type: GeomPoint
#> Layers: 1
#>
#> CRITICAL ISSUES (1):
#> 1. [color] Red-green color combination detected (problematic for 8% of males with deuteranopia/protanopia)
#>
#> WARNINGS (3):
#> 1. [scales] Unusual aspect ratio (6.01) may distort perception of relationships
#> 2. [text] Axis text size (0.8pt) is very small and may be hard to read
#> 3. [text] Title text is smaller than recommended
#>
#> SUGGESTIONS:
#> - Use colorblind-safe palettes: viridis::scale_color_viridis() or RColorBrewer
#> - Consider using coord_fixed() for appropriate aspect ratio
#> - Increase axis text size: theme(axis.text = element_text(size = 10))
#> - White backgrounds work well, but ensure sufficient contrast with data elements
#>
#> Run gg_suggest_fixes() for code recommendations.Much better! And here’s how it looks to colorblind users:
gg_simulate_cvd(improved_plot, type = "deutan")
#> Simulating deutan color vision deficiency...
#> Original colors: #CC4678FF, #0D0887FF, #F0F921FF
#> Simulated colors: #848175FF, #002085FF, #FFF13CFFThe colors are still distinguishable!
gg_simulate_cvd()GGenemy helps you create visualizations that are accessible, honest,
and clear. Run gg_audit() on your plots before sharing
them!
For more information, visit: https://github.com/andytai7/GGenemy