{
  "_id": "6a18590eacfb0bcc41db9ec9",
  "Package": "ggspec",
  "Type": "Package",
  "Title": "Extract and Compare 'ggplot2' Plot Specifications as Tidy Data\nFrames",
  "Version": "0.1.0",
  "Authors@R": "person(\"Clement\", \"Lee\", email = \"clement.lee.tm@outlook.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-1785-8671\"))",
  "Author": "Clement Lee [aut, cre] (ORCID:\n<https://orcid.org/0000-0003-1785-8671>)",
  "Maintainer": "Clement Lee <clement.lee.tm@outlook.com>",
  "Description": "Inspects 'ggplot' objects by extracting their full\ndeclarative specification - layers, aesthetic mappings, scales,\nfacets, coordinate systems, and labels - as tidy data frames. A\nsecond tier of functions enables structural comparison of two\n'ggplot' objects, supporting automated plot testing, auditing,\nand framework-agnostic grading workflows. Unlike 'ggcheck',\nwhich is designed exclusively for 'learnr'/'gradethis'\npipelines and returns ad-hoc objects, 'ggspec' returns\nrectangular, pipeable output and does not require any grading\nframework as a dependency.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "RoxygenNote": "7.2.3",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "URL": "https://github.com/clement-lee/ggspec",
  "BugReports": "https://github.com/clement-lee/ggspec/issues",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-28 14:55:36 UTC",
    "User": "root"
  },
  "Repository": "https://cran.r-universe.dev",
  "Date/Publication": "2026-05-28 12:48:00 UTC",
  "RemoteUrl": "https://github.com/cran/ggspec",
  "RemoteRef": "HEAD",
  "RemoteSha": "14f2da794f66992fac02e5f61d18cb66e996459b",
  "MD5sum": "a305c234418d4d753292e17a61b6a1e6",
  "_user": "cran",
  "_type": "src",
  "_file": "ggspec_0.1.0.tar.gz",
  "_fileid": "b23fb6d16e0b05431f5b05aab492f67ed2fafb92e02647cbab4d2270b5902d67",
  "_filesize": 365050,
  "_sha256": "b23fb6d16e0b05431f5b05aab492f67ed2fafb92e02647cbab4d2270b5902d67",
  "_created": "2026-05-28T14:55:36.000Z",
  "_published": "2026-05-28T15:02:38.811Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 78319572185,
      "time": 187,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7269353315"
    },
    {
      "job": 78319572225,
      "time": 146,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7269334990"
    },
    {
      "job": 78318377932,
      "time": 193,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7269236102"
    },
    {
      "job": 78319572152,
      "time": 151,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7269338508"
    }
  ],
  "_buildurl": "https://github.com/r-universe/cran/actions/runs/26582070170",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/cran/ggspec",
  "_commit": {
    "id": "14f2da794f66992fac02e5f61d18cb66e996459b",
    "author": "Clement Lee <clement.lee.tm@outlook.com>",
    "committer": "cran-robot <csardi.gabor+cran@gmail.com>",
    "message": "version 0.1.0\n",
    "time": 1779972480
  },
  "_maintainer": {
    "name": "Clement Lee",
    "email": "clement.lee.tm@outlook.com",
    "login": "clement-lee",
    "orcid": "0000-0003-1785-8671",
    "description": "Lecturer at School of Mathematics, Statistics and Physics, Newcastle University",
    "uuid": 18400316
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "ggplot2",
      "version": ">= 3.4.0",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "version": ">= 3.2.0",
      "role": "Imports"
    },
    {
      "package": "dplyr",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "learnr",
      "role": "Suggests"
    },
    {
      "package": "palmerpenguins",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "MASS",
      "role": "Suggests"
    },
    {
      "package": "covr",
      "role": "Suggests"
    }
  ],
  "_owner": "cran",
  "_selfowned": false,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-22",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "0.1.0",
      "date": "2026-05-28"
    }
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "clement-lee",
      "count": 1,
      "uuid": 18400316
    }
  ],
  "_userbio": {
    "uuid": 6899542,
    "type": "organization",
    "name": "cran",
    "description": "Unofficial read-only mirror of all CRAN R packages"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/ggspec"
  },
  "_devurl": "https://github.com/clement-lee/ggspec",
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/ggspec.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2026-05-28"
    }
  ],
  "_exports": [
    "assert_ggplot",
    "canon",
    "check_plot",
    "compare_conceptual",
    "compare_plots",
    "compare_visual",
    "enrich_spec",
    "equiv_aes",
    "equiv_coord",
    "equiv_data",
    "equiv_facets",
    "equiv_labels",
    "equiv_layers",
    "equiv_params",
    "equiv_plot",
    "equiv_rendered",
    "equiv_scales",
    "expect_equiv_plot",
    "has_layer",
    "is_ggplot",
    "mapping_exists",
    "n_layers",
    "spec_aes",
    "spec_coord",
    "spec_data",
    "spec_facets",
    "spec_labels",
    "spec_layers",
    "spec_plot",
    "spec_scales"
  ],
  "_help": [
    {
      "page": "assert_ggplot",
      "title": "Assert that an object is a ggplot",
      "topics": [
        "assert_ggplot"
      ]
    },
    {
      "page": "canon",
      "title": "Canonicalise a ggplot specification",
      "topics": [
        "canon"
      ]
    },
    {
      "page": "check_plot",
      "title": "Framework-agnostic plot check",
      "topics": [
        "check_plot"
      ]
    },
    {
      "page": "compare_conceptual",
      "title": "Compare two ggplot objects for conceptual similarity",
      "topics": [
        "compare_conceptual"
      ]
    },
    {
      "page": "compare_plots",
      "title": "Compare two ggplot objects",
      "topics": [
        "compare_plots"
      ]
    },
    {
      "page": "compare_visual",
      "title": "Compare two ggplot objects for visual equivalence",
      "topics": [
        "compare_visual"
      ]
    },
    {
      "page": "enrich_spec",
      "title": "Enrich a plot's layer specification with build-derived default information",
      "topics": [
        "enrich_spec"
      ]
    },
    {
      "page": "equiv_aes",
      "title": "Compare aesthetic mappings of two ggplot objects",
      "topics": [
        "equiv_aes"
      ]
    },
    {
      "page": "equiv_coord",
      "title": "Compare coordinate systems of two ggplot objects",
      "topics": [
        "equiv_coord"
      ]
    },
    {
      "page": "equiv_data",
      "title": "Compare the data of a layer in two ggplot objects",
      "topics": [
        "equiv_data"
      ]
    },
    {
      "page": "equiv_facets",
      "title": "Compare facet specification of two ggplot objects",
      "topics": [
        "equiv_facets"
      ]
    },
    {
      "page": "equiv_labels",
      "title": "Compare labels of two ggplot objects",
      "topics": [
        "equiv_labels"
      ]
    },
    {
      "page": "equiv_layers",
      "title": "Compare layer structure of two ggplot objects",
      "topics": [
        "equiv_layers"
      ]
    },
    {
      "page": "equiv_params",
      "title": "Compare parameters of a specific layer in two ggplot objects",
      "topics": [
        "equiv_params"
      ]
    },
    {
      "page": "equiv_plot",
      "title": "Compare two ggplot objects across multiple dimensions",
      "topics": [
        "equiv_plot"
      ]
    },
    {
      "page": "equiv_rendered",
      "title": "Compare the rendered (built) layer data of two ggplot objects",
      "topics": [
        "equiv_rendered"
      ]
    },
    {
      "page": "equiv_scales",
      "title": "Compare scales of two ggplot objects",
      "topics": [
        "equiv_scales"
      ]
    },
    {
      "page": "expect_equiv_plot",
      "title": "testthat expectation for plot equivalence",
      "topics": [
        "expect_equiv_plot"
      ]
    },
    {
      "page": "has_layer",
      "title": "Test whether a plot contains a given layer",
      "topics": [
        "has_layer"
      ]
    },
    {
      "page": "is_ggplot",
      "title": "Test whether an object is a ggplot",
      "topics": [
        "is_ggplot"
      ]
    },
    {
      "page": "mapping_exists",
      "title": "Test whether a specific aesthetic mapping exists in a plot",
      "topics": [
        "mapping_exists"
      ]
    },
    {
      "page": "n_layers",
      "title": "Count the number of layers in a ggplot",
      "topics": [
        "n_layers"
      ]
    },
    {
      "page": "spec_aes",
      "title": "Extract aesthetic mappings as a long-format tidy data frame",
      "topics": [
        "spec_aes"
      ]
    },
    {
      "page": "spec_coord",
      "title": "Extract coordinate system specification as a tidy data frame",
      "topics": [
        "spec_coord"
      ]
    },
    {
      "page": "spec_data",
      "title": "Extract the dataset table for a ggplot object",
      "topics": [
        "spec_data"
      ]
    },
    {
      "page": "spec_facets",
      "title": "Extract facet specification as a tidy data frame",
      "topics": [
        "spec_facets"
      ]
    },
    {
      "page": "spec_labels",
      "title": "Extract plot labels as a tidy data frame",
      "topics": [
        "spec_labels"
      ]
    },
    {
      "page": "spec_layers",
      "title": "Extract layer specifications as a tidy data frame",
      "topics": [
        "spec_layers"
      ]
    },
    {
      "page": "spec_plot",
      "title": "Extract the full plot specification as a master tidy data frame",
      "topics": [
        "spec_plot"
      ]
    },
    {
      "page": "spec_scales",
      "title": "Extract scale specifications as a tidy data frame",
      "topics": [
        "spec_scales"
      ]
    }
  ],
  "_readme": "https://github.com/cran/ggspec/raw/HEAD/README.md",
  "_rundeps": [
    "cli",
    "cpp11",
    "dplyr",
    "farver",
    "generics",
    "ggplot2",
    "glue",
    "gtable",
    "isoband",
    "labeling",
    "lifecycle",
    "magrittr",
    "pillar",
    "pkgconfig",
    "R6",
    "RColorBrewer",
    "rlang",
    "S7",
    "scales",
    "tibble",
    "tidyselect",
    "utf8",
    "vctrs",
    "viridisLite",
    "withr"
  ],
  "_vignettes": [
    {
      "source": "equivalence-patterns.Rmd",
      "filename": "equivalence-patterns.html",
      "title": "Equivalence Patterns and Canonicalisation Modes",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Introduction",
        "1. Inheritance transparency",
        "1.1 Global, local, and mixed aes()",
        "1.2 Global vs per-layer data",
        "1.3 Layer order",
        "2. Bar chart equivalence",
        "2.1 Direct equivalents",
        "2.2 geom_col() — structural mode required",
        "2.3 coord_flip() — visual mode required",
        "2.4 Scale name vs labs() — visual mode required",
        "3. Count plot equivalence",
        "3.1 geom_count() variants — direct equivalents",
        "3.2 geom_point(aes(size = n)) + pre-counted data — separate equivalence group",
        "3.5 Pre-counted bar charts — exhausting the equivalence cases",
        "4. Histogram binning variants",
        "5. Pending work",
        "5.1 Cross-geom stat equivalence",
        "5.2 Multi-dataset layer verification"
      ],
      "created": "2026-05-28 12:48:00",
      "modified": "2026-05-28 12:48:00",
      "commits": 1
    },
    {
      "source": "extracting-specs.Rmd",
      "filename": "extracting-specs.html",
      "title": "Extracting Plot Specifications with ggspec",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Introduction",
        "A motivating example",
        "Layer specification",
        "Controlling inheritance",
        "Aesthetic specification (long format)",
        "Scale specification",
        "Facet specification",
        "Label specification",
        "Coordinate system specification",
        "The master summary: spec_plot()"
      ],
      "created": "2026-05-28 12:48:00",
      "modified": "2026-05-28 12:48:00",
      "commits": 1
    },
    {
      "source": "grading-with-ggspec.Rmd",
      "filename": "grading-with-ggspec.html",
      "title": "Plot Grading and Testing with ggspec",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Introduction",
        "Comparing two plots with equiv_plot()",
        "Running individual checks",
        "The exact argument",
        "Framework-agnostic checking with check_plot()",
        "Swapping in a learnr/gradethis fail function",
        "Using expect_equiv_plot() in testthat",
        "Inspecting the diff",
        "Comparing layer parameters",
        "Canonicalisation-aware comparison with compare_plots()",
        "Modes",
        "Using a mode in check_plot()",
        "What each mode covers",
        "Summary of available checks"
      ],
      "created": "2026-05-28 12:48:00",
      "modified": "2026-05-28 12:48:00",
      "commits": 1
    }
  ],
  "_score": 3.1760912590556813,
  "_indexed": false,
  "_nocasepkg": "ggspec",
  "_universes": [
    "cran",
    "clement-lee"
  ],
  "_indexurl": "https://clement-lee.r-universe.dev/ggspec",
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.0",
      "date": "2026-05-28T15:00:05.000Z",
      "distro": "noble",
      "commit": "14f2da794f66992fac02e5f61d18cb66e996459b",
      "fileid": "c8135fb9cb11ac39f56108d1d7fd7415c6c40f4af160626404f81858ce2f65f4",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/26582070170"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.0",
      "date": "2026-05-28T14:59:18.000Z",
      "distro": "noble",
      "commit": "14f2da794f66992fac02e5f61d18cb66e996459b",
      "fileid": "b3f11e3d484b01d27ba32aa7db2c2e3cb3c09c9c1273fcfc74f88d378bf90daa",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/26582070170"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.0",
      "date": "2026-05-28T14:59:55.000Z",
      "commit": "14f2da794f66992fac02e5f61d18cb66e996459b",
      "fileid": "a3663d85712c8c2e69603fac60b27102fb4d70ab797e203eed0c71574aec9f96",
      "status": "success",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/26582070170"
    }
  ]
}