Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Lisp-Stat/quick-plot: ggplot-Style Plotting for Lisp-Stat · GitHub
Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn

This experimental library is deprecated and its functionality has been merged into the main plot system.

Logo

Quick Plot for Common Lisp

Composable, ggplot-style plotting helpers for Lisp-Stat
Explore the docs »

Report Bug · Request Feature · Reference Manual

Table of Contents

  1. About the Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Resources
  6. Contributing
  7. License
  8. Contact

About the Project

Quick Plot provides composable helper functions for building Vega-Lite plot specifications in Common Lisp. Inspired by R's ggplot2, plots are constructed by combining independent layers — geometry, labels, scales, coordinates and themes — rather than writing monolithic JSON-like plists by hand.

The system is organized into three packages. The geom package provides mark types (point, bar, histogram, box-plot, line), each responsible for encoding data fields into a single visual form. The gg package provides layering modifiers (label, axes, coord, theme, tooltip) that control everything around the marks. The qplot package provides a single qplot function that collapses plot definition, registration and rendering into one call for interactive REPL use.

Every helper returns a plist fragment. A recursive merge-plists combines them into a single Vega-Lite spec. A mark function never sets axis titles; label never touches encodings; theme never alters mark types. This separation means any helper can be used with any plot type, and layers can be added, removed or swapped without affecting the rest of the specification.

Built With

Getting Started

To get a local copy up and running follow these steps:

Prerequisites

An ANSI Common Lisp implementation. Developed and tested with SBCL.

Installation

Getting the source

To make the system accessible to ASDF (a build facility, similar to make in the C world), clone the repository in a directory ASDF knows about. By default the common-lisp directory in your home directory is known. Create this if it doesn't already exist and then:

  1. Clone the repositories
cd~/common-lisp && \
git clone https://github.com/Lisp-Stat/quick-plot
  1. Reset the ASDF source-registry to find the new system (from the REPL)
    (asdf:clear-source-registry)
  2. Load the system
    (asdf:load-system :quick-plot)

If you have installed the slime ASDF extensions, you can invoke this with a comma (',') from the slime REPL.

Getting dependencies

To get the third party systems that quick-plot depends on, you can use a dependency manager, such as Quicklisp or CLPM. Once installed, get the dependencies with either of:

(clpm-client:sync :sources"quick-plot") ;sources may vary
(ql:quickload :quick-plot)

You need do this only once. After obtaining the dependencies, you can load the system with ASDF as described above without first syncing sources.

Usage

Import the helper functions and load the Vega example datasets:

(vega:load-vega-examples)
(import'(geom:point geom:bar geom:histogram geom:box-plot geom:line))
(import'(gg:label gg:axes gg:coord gg:theme gg:tooltip))
(import'(qplot:qplot))

Create a scatter plot with color encoding and axis labels:

(qplot 'cars vgcars
`(:title"Horsepower vs. Fuel Efficiency")
(point :horsepower:miles-per-gallon:color:origin:filledt)
(label :x"Horsepower":y"Miles per Gallon"))

Create a histogram of a quantitative variable:

(qplot 'mpg-dist vgcars
`(:title"Distribution of Miles per Gallon")
(histogram :miles-per-gallon:color"darkslategray")
(label :x"Miles per Gallon":y"Count"))

Create a bar chart with aggregation:

(qplot 'avg-mpg vgcars
`(:title"Average MPG by Origin")
(bar :origin:miles-per-gallon:aggregate:mean)
(label :x"Origin":y"Mean MPG"))

For more examples, please refer to the Documentation.

Roadmap

See the open issues for a list of proposed features (and known issues).

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see the resources and community page for more information.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please see CONTRIBUTING for details on the code of conduct, and the process for submitting pull requests.

License

Distributed under the MS-PL License. See LICENSE for more information.

Contact

Project Link: https://github.com/lisp-stat/quick-plot

About

ggplot-Style Plotting for Lisp-Stat

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages