# Getting Started with GGenemy

## Introduction

GGenemy audits your ggplot2 visualizations to ensure they are:

- Accessible to colorblind users (~8% of males)
- Honest and not misleading
- Clear and readable

Think of it as a linter for data visualization!

## Installation

    # Install from GitHub
    devtools::install_github("yourusername/GGenemy")

    library(GGenemy)
    library(ggplot2)

## Quick Example

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_plot

Now 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.

## Color Accessibility

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, #003DFB

See how the red and green look very similar?

## Getting Fix Suggestions

    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)

## Creating an Accessible Plot

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_plot

Check 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, #FFF13CFF

The colors are still distinguishable!

## What GGenemy Checks

### Color Issues

- Red-green combinations
- Too many colors (>7)
- Low contrast colors
- Rainbow palettes (perceptually non-uniform)

### Scale Issues

- Bar charts not starting at zero
- Truncated axes
- Dual y-axes
- Unlabeled log scales
- Inappropriate aspect ratios

### Text Issues

- Text too small
- Overlapping labels
- Missing axis labels
- Long labels that need wrapping

### Accessibility

- Points/lines too small
- Color as the only distinguishing feature
- Missing titles and labels

## Best Practices

1. Use colorblind-safe palettes: viridis, plasma, ColorBrewer
2. Add redundant encoding: Use both color AND shape
3. Label everything: Axes, legends, titles
4. Start bar charts at zero
5. Keep text readable: Size 10+ points
6. Test with `gg_simulate_cvd()`

## Conclusion

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