Command-line Unix ASCII-based charting / plotting tool Command-line Unix ASCII-based charting / plotting tool unix unix

Command-line Unix ASCII-based charting / plotting tool


Try gnuplot. It has very powerful graphing possibilities.

It can output to your terminal in the following way:

gnuplot> set terminal dumbTerminal type set to 'dumb'Options are 'feed 79 24'gnuplot> plot sin(x)   1 ++----------------**---------------+----**-----------+--------**-----++     +                *+ *              +   *  *          +  sin(x) ****** + 0.8 ++              *    *                *    *                *    *   ++     |               *    *                *    *                *    *    | 0.6 ++              *     *              *      *              *      *  ++     *              *       *             *       *             *      *   | 0.4 +*             *       *             *       *             *      *  ++     |*            *        *            *        *            *        *  | 0.2 +*            *        *            *        *            *        * ++     | *          *          *          *          *          *          * |   0 ++*          *          *          *          *          *          *++     |  *         *           *         *           *         *           *|-0.2 ++ *         *           *         *           *         *           *+     |   *       *            *        *            *        *            *|-0.4 ++  *       *            *        *            *        *            *+     |   *      *              *      *              *      *              *-0.6 ++  *      *              *      *              *      *             ++     |    *     *               *     *               *    *               |-0.8 ++    *   *                 *   *                *    *              ++     +     *  *        +         *  *   +              *  *                +  -1 ++-----**---------+----------**----+---------------**+---------------++    -10               -5                0                 5                10


While gnuplot is powerful, it's also really irritating when you just want to pipe in a bunch of points and get a graph.

Thankfully, someone created eplot (easy plot), which handles all the nonsense for you.

It doesn't seem to have an option to force terminal graphs; I patched it like so:

--- eplot.orig  2012-10-12 17:07:35.000000000 -0700+++ eplot       2012-10-12 17:09:06.000000000 -0700@@ -377,6 +377,7 @@                # ---- print the options                com="echo '\n"+getStyleString+@oc["MiscOptions"]                com=com+"set multiplot;\n" if doMultiPlot+               com=com+"set terminal dumb;\n"                com=com+"plot "+@oc["Range"]+comString+"\n'| gnuplot -persist"                printAndRun(com)                # ---- convert to PDF

An example of use:

[$]> git shortlog -s -n | awk '{print $1}' | eplot 2> /dev/null  3500 ++-------+-------+--------+--------+-------+--------+-------+-------++       +        +       +        "/tmp/eplot20121012-19078-fw3txm-0" ****** +       *                                                                    |  3000 +*                                                                  ++       |*                                                                   |       | *                                                                  |  2500 ++*                                                                 ++       | *                                                                  |       |  *                                                                 |  2000 ++ *                                                                ++       |  **                                                                |  1500 ++   ****                                                           ++       |        *                                                           |       |         **                                                         |  1000 ++          *                                                       ++       |            *                                                       |       |            *                                                       |   500 ++            ***                                                   ++       |                **************                                      |       +        +       +        +    **********  +        +       +        +     0 ++-------+-------+--------+--------+-----***************************++       0        5       10       15       20      25       30      35       40


Another option I've just run across is bashplotlib. Here's an example run on (roughly) the same data as my eplot example:

[$]> git shortlog -s -n | awk '{print $1}' | hist 33|   o 32|   o 30|   o 28|   o 27|   o 25|   o 23|   o 22|   o 20|   o 18|   o 16|   o 15|   o 13|   o 11|   o 10|   o  8|   o  6|   o  5|   o  3|   o o     o  1|   o o     o o       o  0|   o o o o o o       o    ---------------------------------------------|       Summary       |-----------------------|   observations: 50  || min value: 1.000000 ||  mean : 519.140000  ||max value: 3207.000000|-----------------------

Adjusting the bins helps the resolution a bit:

[$]> git shortlog -s -n | awk '{print $1}' | hist --nosummary --bins=40 18|   o   |   o 17|   o 16|   o 15|   o 14|   o 13|   o 12|   o 11|   o 10|   o  9|   o  8|   o  7|   o  6|   o  5|   o   o  4|   o   o o  3|   o o o o   o  2|   o o o o   o  1|   o o o o   o                     o       o  0|   o o o o o o           o     o   o o   o o                                 o   |   o o o o o o           o     o   o o   o o                                 o    --------------------------------------------------------------------------------