Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

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/plot: A vega-lite DSL for Common Lisp · GitHub
Skip to content

Repository files navigation

ContributorsForksStargazersIssuesMS-PL LicenseLinkedIn


Logo

Plot

A library for plotting with Common Lisp
Explore the tutorial »

Report Bug · Request Feature · Reference Manual

Table of Contents

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

About the Project

The Plot system provides a way to visualize data in Common Lisp. It includes text-based plotting that works in the REPL and JavaScript visualizations rendered through Vega and Vega-Lite. For Vega work, make-plot is now the constructor center, while the public geom and gg packages provide the high-level plot-owned authoring fragments that are merged into a plot specification.

Plot integrates with data-frame, and can also be used independently.

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 and CCL.

Installation

To make the system accessible to ASDF, clone the repository in a directory ASDF already knows about. By default, ~/common-lisp/ is commonly used:

cd~/common-lisp
git clone https://github.com/Lisp-Stat/plot

If needed, reset the ASDF source registry from the REPL:

(asdf:clear-source-registry)

Load the Vega backend with Quicklisp:

(ql:quickload :plot/vega)

After dependencies are available, loading through ASDF also works:

(asdf:load-system :plot/vega)

The examples below assume:

(use-package'#:vega)

Usage

High-Level Authoring

The recommended path is:

(make-plot data fragment &rest fragments)

geom and gg return plot-owned fragments. make-plot merges them into a Vega-Lite spec and returns a plot object. Construction does not display a plot implicitly.

A Small Point Plot

(defparameter*points*#((:x1:y2:group"A")
(:x2:y3:group"B")
(:x3:y5:group"A")))
(defparameter*point-plot*
(make-plot *points*'(:title"Simple Point Plot")
(geom:point :x:y:color:group:filledt)
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

Display is explicit:

(plot:plot *point-plot*)

Layered Fragments

(defparameter*layered-plot*
(make-plot *points*'(:title"Points and Trend")
(gg:layer
'(:mark (:type:point:filledt)
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative)))
'(:mark:line:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(gg:label :x"X":y"Y")
(gg:theme :width360:height220)))

geom helpers also compose directly with gg fragments:

(defparameter*line-plot*
(make-plot *points*'(:title"Geom + GG")
(geom:line :x:y:color"steelblue":pointt)
(gg:label :x"X":y"Y")
(gg:tooltip :x'(:y:quantitative))))

Advanced Explicit Construction

Use the explicit :base path when you already have an authored lower-level Vega-Lite plist and want make-plot to remain the constructor center.

(defparameter*base*'(:title"Base Plot":mark:line:data (:values#((:x1:y2)
(:x2:y4)))
:encoding (:x (:field:x:type:quantitative)
:y (:field:y:type:quantitative))))
(defparameter*overlay*'((:title"Base Plot With Overlay")
(:encoding (:tooltip (:field:y:type:quantitative)))))

Small explicit-construction forms:

(make-plot :base*base*)
(make-plot :base*base*:name"trend")
(make-plot :base*base*:overlay*overlay*)
(make-plot :base*base*:name"trend":overlay*overlay*)

overlay is an explicit list of fragments that is merged on top of base.

Output Paths

make-plot constructs a plot object only. Common explicit next steps are:

  • (plot:plot plot) to render through the browser-oriented Vega path
  • (vega:write-html plot) to write an HTML wrapper
  • (vega:write-spec plot) to emit Vega-Lite JSON
  • notebook consumers via the optional plot/vega/jupyter adapter

Resources

This system is part of the Lisp-Stat project; that should be your first stop for information. Also see:

Roadmap

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

Contributing

Contributions are welcome. See CONTRIBUTING for details on the code of conduct and the pull request process.

License

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

Contact

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

About

A vega-lite DSL for Common Lisp

Topics

Resources

Contributing

Stars

38 stars

Watchers

5 watching

Forks

Releases

Contributors

Languages