Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python ASCII plots in terminal

With Octave I am able to plot arrays to the terminal, for example, plotting an array with values for the function x^2 gives this output in my terminal:

   10000 ++---------+-----------+----------+-----------+---------++          ++         +           +          +           +         ++          |+         :           :          :           :         +|          |++        :           :          :           :        ++|          | +        :           :          :           :        + |          | ++       :           :          :           :       ++ |     8000 ++.+..................................................+.++          |  ++      :           :          :           :      ++  |          |   ++     :           :          :           :     ++   |          |    +     :           :          :           :     +    |          |    ++    :           :          :           :    ++    |          |     +    :           :          :           :    +     |     6000 ++....++..........................................++....++          |      ++  :           :          :           :  ++      |          |       +  :           :          :           :  +       |          |       ++ :           :          :           : ++       |          |        ++:           :          :           :++        |     4000 ++........++..................................++........++          |          +           :          :           +          |          |          ++          :          :          ++          |          |          :++         :          :         ++:          |          |          : ++        :          :        ++ :          |          |          :  ++       :          :       ++  :          |     2000 ++.............++........................++.............++          |          :    ++     :          :     ++    :          |          |          :     +++   :          :   +++     :          |          |          :       ++  :          :  ++       :          |          |          :        +++:          :+++        :          |          +          +          ++++      ++++          +          +        0 ++---------+-----------+----------+-----------+---------++          0        20000       40000      60000       80000     100000 

Is there some way I can do something similar in Python, specifically with matplotlib? bashplotlib seems to offer some of this functionality but appears to be quite basic compared to Octave's offering.

like image 504
Mike Vella Avatar asked Nov 30 '13 01:11

Mike Vella


People also ask

What does plot () do in Python?

The plot() function is used to draw points (markers) in a diagram. By default, the plot() function draws a line from point to point.

Can I plot a graph using Python?

Graphs in Python can be plotted by using the Matplotlib library. Matplotlib library is mainly used for graph plotting. You need to install matplotlib before using it to plot graphs. Matplotlib is used to draw a simple line, bargraphs, histograms and piecharts.


1 Answers

As @Benjamin Barenblat pointed out, there is currently no way using matplotlib. If you really want to use a pure python library, you may check ASCII Plotter. However, as I commented above, I would use gnuplot as suggested e.g. in this question.

To use gnuplot directly from python you could either use Gnuplot.py (I haven't tested this yet) or use gnuplot with the scripting interface. Latter can be realised (as suggested here) like:

import numpy as np x=np.linspace(0,2*np.pi,10) y=np.sin(x) import subprocess gnuplot = subprocess.Popen(["/usr/bin/gnuplot"],                             stdin=subprocess.PIPE) gnuplot.stdin.write("set term dumb 79 25\n") gnuplot.stdin.write("plot '-' using 1:2 title 'Line1' with linespoints \n") for i,j in zip(x,y):    gnuplot.stdin.write("%f %f\n" % (i,j)) gnuplot.stdin.write("e\n") gnuplot.stdin.flush() 

This gives a plot like

    1 ++--------+---A******---------+--------+---------+---------+--------++       +         + **      +A*       +        +         +      Line1 **A*** +   0.8 ++        **           *                                            ++       |       **              **                                           |   0.6 ++     A                  *                                         ++       |     *                    *                                         |   0.4 ++   *                                                              ++       |  **                       A                                        |   0.2 ++*                          *                                      ++       |*                            *                                      |     0 A+                             *                              A     ++       |                               *                            *       |  -0.2 ++                               *                          *       ++       |                                 A*                      **         |  -0.4 ++                                  *                    *          ++       |                                    **                 *            |  -0.6 ++                                     *               A            ++       |                                       *            **              |  -0.8 ++                                                 **               ++       +         +         +         +        + A****** **        +         +    -1 ++--------+---------+---------+--------+--------A+---------+--------++       0         1         2         3        4         5         6         7 

Some styling options can be found e.g. here.

like image 125
Jakob Avatar answered Sep 23 '22 03:09

Jakob