A plotting library for Common Lisp that prints plots on the REPL using Unicode characters. Code quality/style may not be the best. Should work with SBCL and CCL.
Can be loaded as "textplot" via Ultralisp. cl-unicode
is a dependency.
For some reason the plots don't show up nicely on Github's markdown renderer, so the outputs look wonkier than they actually are.
There are two backends:
:blocks
uses characters from the "Symbols for Legacy Computing" set.:braille
uses Braille dots. This is intended as a fallback option in case your font of choice cannot render the:blocks
backend.
You can use the :as-string
key to get the output as a string instead of printing to the console.
(plot '((1 2) (2 6) (3 4)) :title "Cool plot" :backend :blocks)
=>
Cool plot
6🬕🬂🬂🬂🬂🬂🬂🬂🬂🬨🬊🬴🬂🬂🬂🬂🬂🬂🬂🬨
▌ 🬦🬀 🬈🬱 ▐
▌ 🬦🬀 🬈🬱 ▐
▌ 🬦🬀 🬈🬱 ▐
▌ 🬦🬀 🬈🬻
▌ 🬦🬀 ▐
▌ 🬦🬀 ▐
▌ 🬦🬀 ▐
▌🬦🬀 ▐
2🬺🬮🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬷
1 3
(plot '((1 2) (2 6) (3 4)) :title "Cool plot" :backend :braille)
=>
Cool plot
6⡏⠉⠉⠉⠉⠉⠉⠉⠉⣹⠛⢍⠉⠉⠉⠉⠉⠉⠉⢹
⡇⠀⠀⠀⠀⠀⠀⠀ ⣰⠃⠀ ⠀⠑⢄ ⠀⠀⠀⠀⠀⢸
⡇⠀⠀⠀⠀⠀⠀ ⣰⠃⠀⠀ ⠀⠀⠀⠑⢄⠀⠀⠀⢸
⡇⠀⠀⠀⠀⠀ ⣰⠃⠀⠀⠀ ⠀⠀⠀⠀⠀⠑⢄⠀⢸
⡇⠀⠀⠀⠀ ⣰⠃⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠑⢼
⡇⠀⠀⠀ ⣰⠃⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢸
⡇⠀⠀ ⣰⠃⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢸
⡇⠀ ⣰⠃⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢸
⡇ ⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢸
2⣷⣃⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸
1 3
(plot-fun #'sin -4 4 0.1 :blocks)
=>
0.99957365🬕🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬡🬆🬊🬴🬂🬂🬂🬨
🬲 🬔 🬁🬓 ▐
🬝🬓 🬘 🬨 ▐
▌🬧 🬞🬄 ▌ ▐
▌🬁🬓 🬘 ▐ ▐
#<FUNCTION SIN> ▌ 🬧 🬞🬄 ▌▐
▌ 🬁🬓 🬘 ▐▐
▌ 🬧 🬞🬄 █
▌ 🬁▌ 🬔 ▐
-0.9995735🬲🬭🬭🬭🬷🬱🬭🬷🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬷
-4.0 3.9999971
x
(plot-fun #'sin -4 4 0.1 :braille)
=>
0.99957365⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢉⠏⠙⢏⠉⠉⠉⢹
⣇⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⡎ ⠀⠘⡆⠀⠀⢸
⡟⡄⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⡸⠀ ⠀⠀⢹⠀⠀⢸
⡇⢳⠀⠀ ⠀⠀⠀⠀⠀⠀⢀⠇ ⠀⠀⠀⠀⠀⡇⠀⢸
⡇⠈⡆⠀ ⠀⠀⠀⠀⠀⠀⡼⠀ ⠀⠀⠀⠀⠀⢸⠀⢸
#<FUNCTION SIN> ⡇⠀⢱⠀⠀ ⠀⠀⠀⠀⢠⠇⠀ ⠀⠀⠀⠀⠀⠀⡇⢸
⡇⠀⠈⡆⠀ ⠀⠀⠀⠀⡜⠀ ⠀ ⠀⠀⠀⠀⠀⠀⢸⣸
⡇⠀⠀⢱⠀⠀ ⠀⠀⢠⠃ ⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⢿
⡇⠀⠀⠈⣇⠀ ⠀⠀⡎⠀ ⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⢸
-0.9995735⣇⣀⣀⣀⣘⣄⣀⣜⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸
-4.0 3.9999971
x
(scatter '((1 2) (2 6) (3 3) (4 4)) :backend :blocks)
=>
6.5🬕🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬂🬨
▌ 🬏 ▐
▌ 🬁🬆 ▐
▌ ▐
▌ 🬏 ▐
▌ 🬁🬆 ▐
▌ 🬇🬛 ▐
▌ 🬞 ▐
▌ 🬊 ▐
1.5🬲🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬭🬷
0.625 4.375
(scatter '((1 2) (2 6) (3 3) (4 4)) :backend :braille)
=>
6.5⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹
⡇⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⢸
⡇⠀⠀⠀⠀⠀⠀⠈⠋⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⢸
⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀ ⠀⢸
⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⡀⠀⠀⢸
⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠈⠋⠀⠀⢸
⡇⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠠⡦⠀⠀⠀⠀⠀⠀⢸
⡇⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢸
⡇⠀⠀⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⢸
1.5⣇⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣸
0.625 4.375
Inspired by UnicodePlots.jl.
Also check out cl-spark and hbook!
vgplot can also generate text plots if you run (vgplot:format-plot t "set terminal dumb")
.