MyNixOS website logo
Description

Audit 'ggplot2' Visualizations for Accessibility and Best Practices.

Audits 'ggplot2' visualizations for accessibility issues, misleading practices, and readability problems. Checks for color accessibility concerns including colorblind-unfriendly palettes, misleading scale manipulations such as truncated axes and dual y-axes, text readability issues like small fonts and overlapping labels, and general accessibility barriers. Provides comprehensive audit reports with actionable suggestions for improvement. Color vision deficiency simulation uses methods from the 'colorspace' package Zeileis et al. (2020) <doi:10.18637/jss.v096.i01>. Contrast calculations follow WCAG 2.1 guidelines (W3C 2018 <https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum>).

GGenemy

Lifecycle:experimental CRANstatus

Enemy of Bad Practices in Data Visualization

GGenemy is an R package that audits your ggplot2 visualizations for accessibility issues, misleading practices, and readability problems. Think of it as a linter for your data visualizations.

Why GGenemy?

Data visualizations can inadvertently mislead or exclude audiences through:

  • Poor color choices that are invisible to colorblind users (~8% of males)
  • Misleading scales like truncated axes or dual y-axes
  • Readability issues like tiny text or overlapping labels
  • Accessibility barriers that make charts hard to interpret

GGenemy catches these issues automatically and suggests fixes.

Installation

# Install from CRAN (coming soon)
install.packages("GGenemy")

# Or install development version from GitHub:
# install.packages("devtools")
devtools::install_github("andytai7/GGenemy")

Quick Start

library(GGenemy)
library(ggplot2)

# Create a plot with some issues
p <- ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) +
  geom_point() +
  scale_color_manual(values = c("red", "green", "blue"))

# Run comprehensive audit
report <- gg_audit(p)
print(report)

Key Features

Comprehensive Auditing

# Check everything
gg_audit(your_plot)

# Check specific aspects
gg_audit(your_plot, checks = c("color", "scales"))

Color Accessibility

Detects problematic color combinations and suggests colorblind-safe alternatives:

gg_audit_color(your_plot)

Colorblind Simulation

See how your plot appears to colorblind users:

# Simulate different types of color vision deficiency
gg_simulate_cvd(your_plot, type = "deutan")  # green-blind
gg_simulate_cvd(your_plot, type = "protan")  # red-blind
gg_simulate_cvd(your_plot, type = "tritan")  # blue-blind

Scale & Axis Checks

Catches misleading practices:

  • Truncated axes on bar charts
  • Dual y-axes
  • Inappropriate aspect ratios
  • Unlabeled log scales
gg_audit_scales(your_plot)

Automatic Fixes

Get code suggestions or apply fixes automatically:

# Get copy-paste code suggestions
gg_suggest_fixes(your_plot)

# Apply automatic fixes
fixed_plot <- gg_suggest_fixes(your_plot, auto_fix = TRUE)

Accessibility Auditing

Checks for:

  • Text size and readability
  • Point/line sizes
  • Redundant encoding (not relying on color alone)
  • Label clarity
gg_audit_accessibility(your_plot)

Example Workflow

library(ggplot2)
library(GGenemy)

# Create a problematic plot
problematic_plot <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point(size = 1) +
  scale_color_manual(values = c("red", "green", "blue")) +
  labs(title = "Plot", x = "wt", y = "mpg")

# Audit it
report <- gg_audit(problematic_plot)

# Get fix suggestions
gg_suggest_fixes(problematic_plot)

# Apply automatic fixes
improved_plot <- gg_suggest_fixes(problematic_plot, auto_fix = TRUE)

# View the improved plot
print(improved_plot)

Philosophy

GGenemy believes in:

  1. Accessibility First: Visualizations should be perceivable by everyone
  2. Honest Representation: Data should be presented without distortion
  3. Clarity Over Aesthetics: Readability trumps flashiness
  4. Constructive Guidance: We suggest fixes, not just criticisms

Roadmap

  • [x] Color accessibility checking
  • [x] Colorblind vision simulation
  • [x] Scale and axis auditing
  • [x] Text readability checks
  • [x] Automatic fix suggestions
  • [ ] Integration with RMarkdown/Quarto for batch auditing
  • [ ] Custom rule sets
  • [ ] Interactive Shiny app for exploration

Contributing

GGenemy is in active development! Contributions are welcome:

Related Packages

Citation

citation("GGenemy")

License

MIT © Andy Man Yeung Tai


GGenemy: Making data visualization more accessible, honest, and clear.

Metadata

Version

0.1.0

License

Unknown

Platforms (78)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    uefi
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-uefi
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-uefi
  • x86_64-windows