
Unicode-based scientific plotting for working in the terminal - delib
https://github.com/Evizero/UnicodePlots.jl
======
charlesdaniels
Every time I see these things, I wish Sixel graphics[0] were better supported,
or else some more modern alternative.

Being able to use GNUPlot with Sixel output or tools like lsix[1] is really
cool! I think if support / libraries / knowledge about Sixels was more
widespread, we would see some really nifty terminal applications cropping up.

0 - [https://saitoha.github.io/libsixel/](https://saitoha.github.io/libsixel/)

1 - [https://github.com/hackerb9/lsix](https://github.com/hackerb9/lsix)

~~~
fishmaster
This looks pretty cool. Why isn't this more popular?

~~~
dheera
Most of the "default" terminal apps (e.g. gnome-terminal) don't support sixel.

------
sprash
I recently found out that XTerm supports sixels natively if started with the
"-ti 340" option. For example gnuplot can make use of that feature using the
command "set terminal sixlegd".

It turns out because of the way sixels are encoded (six vertical pixels in a
row using bitplanes) it packs better than png when used in conjunction with
the bzip2 packer. Every image can simply be encoded to sixel with imagemagick
using "convert image.png sixel:- > image.six"

Personally I think sixels are genius should be used much more often.

~~~
brutt
Sixels will be added to libvte (gnome-terminal):
[https://gitlab.gnome.org/GNOME/vte/-/issues/254](https://gitlab.gnome.org/GNOME/vte/-/issues/254)

~~~
iso-8859-1
Great news! I think we may finally see a resurgence. It will be well supported
on mainstream Linux, and given that the web is getting so heavy-weight, this
will offer a solid alternative for graphics that you can rely on. Libvte is
very popular.

------
dorfsmay
As somebody who grew up during the semi-graphic era, it makes me sad that we
still use a 30 year old standard for terminals and cannot do direct plot in
the main terminal (as opposed to the Tektronix separate window).

~~~
tempodox
I was thinking something similar. Looking at this makes me wish a terminal app
could just embed a PNG or whatever in its output.

~~~
kps
The OSC 1337 protocol pioneered by iTerm2 does exactly that. You'll have to
check whether your preferred terminal supports it (I known mlterm does),
either from documentation or just trying it¹.

Also, some terminals support the DEC SIXEL protocol² (again, I know mlterm
does).

¹
[https://www.iterm2.com/utilities/imgcat](https://www.iterm2.com/utilities/imgcat)

² [https://en.wikipedia.org/wiki/Sixel](https://en.wikipedia.org/wiki/Sixel)

 _Edit_ : I couldn't find a simple SIXEL sample — you'd think one of the
popular sixel libraries would have some in unit tests, but no. So for the
purpose of this thread (but maybe not forever, hence /tmp/),

    
    
        curl https://datatravelandexperiments.com/kps/tmp/example.sixel
        curl https://datatravelandexperiments.com/kps/tmp/example.osc1337
    

Those are such that output directly to the terminal will produce an image if
that format is supported (and _probably_ nothing if not, but I'm not making
promises).

------
visviva
This is one of my favorite Julia packages! A fast plotting utility that
outputs right to the terminal is one of those things that I didn't realize I
needed until I found it.

~~~
ViralBShah
Yes. Some people think this is a gimmick. But it is actually quite a bit
useful. Especially, when in the middle of a session, I often do not want to
move my hands from the keyboard to the mouse to close windows that plotting
tools open, or move my gaze. It's not often that I work like this, but I like
it that I can for the times I need to.

Having inline plots in the terminal - especially things like histograms which
just work - is often quite handy. And it just works over an ssh connection.

Also, recently, Julia changed its sparse matrix display to show a picture of
the sparse matrix (spy plot) using braille characters!

    
    
      julia> a = sprand(20,20,0.2)
      20×20 SparseMatrixCSC{Float64,Int64} with 67 stored entries:
      ⠀⠀⠁⠐⠄⠋⠡⠀⠐⡀
      ⢳⠁⠡⠈⠂⠀⠀⠁⢡⠑
      ⡠⠋⢠⡀⢄⢀⢀⠄⠈⠈
      ⠩⠄⠐⠨⠈⠀⠆⠂⠨⠤
      ⠄⠄⢀⢂⠠⢀⠀⠂⠆⠂

------
lsllc
This is awesome. When I build my spaceship, it's going to have a command line
interface and I'll use this to display pertinent spaceship-data, such as
gravitational pull of nearby black holes, tachyon levels, and warp signatures
etc.

Can't safely use a touchscreen or mouse when all hell breaks loose in space!

------
antirez
Trivia: Redis uses a similar technique (Braille unicode points) to show the
Redis 5 LOLWUT. [http://antirez.com/news/123](http://antirez.com/news/123)

------
michaelhoffman
This is great! Anyone know of anything like this for Python or R?

~~~
metaodi
I guess plotille
([https://github.com/tammoippen/plotille](https://github.com/tammoippen/plotille))
is the closest match for python. And maybe termgraph
([https://github.com/mkaz/termgraph](https://github.com/mkaz/termgraph)) is
kind of similar.

~~~
foob
It's not unicode, but there's also sixelplot [1] which allows matplotlib
plotting in a terminal using sixel. The underlying pysixel library [2]
unfortunately doesn't support Python 3.7+ however.

[1] [https://github.com/kktk-KO/sixelplot](https://github.com/kktk-
KO/sixelplot)

[2] [https://github.com/saitoha/PySixel](https://github.com/saitoha/PySixel)

~~~
iso-8859-1
There is a PR that fixes it for 3.7, it needs review:
[https://github.com/saitoha/PySixel/pull/5](https://github.com/saitoha/PySixel/pull/5)

