133 votes

Outil de graphique / traçage Unix ASCII en ligne de commande

Existe-t-il un bon outil de cartographie / graphique / tracé UNIX en ligne de commande? Je cherche quelque chose qui va tracer des points xy sur un graphique ASCII.

Juste pour clarifier, je cherche quelque chose qui produira un graphique en ASCII (comme le style ascii-art), afin que je puisse l'utiliser sur une session de shell interactive sans avoir besoin de X.

127voto

Palmin Points 1281

Essayez gnuplot . Il offre des possibilités graphiques très puissantes.

Il peut sortir vers votre terminal de la manière suivante:

 gnuplot> set terminal dumb
Terminal 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
 

64voto

Xiong Chiamiov Points 1734

Tandis que gnuplot est puissant, il est également très irritant de vouloir graver un tas de points et d’obtenir un graphique.

Heureusement, quelqu'un a créé eplot (parcelle facile), qui gère toutes les bêtises pour vous.

Il ne semble pas y avoir d’option pour forcer les graphes terminaux; Je l'ai patché comme ça:

 --- 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
 

Un exemple d'utilisation:

 [$]> 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
 

24voto

Xiong Chiamiov Points 1734

Une autre option que je viens de rencontrer est bashplotlib . Voici un exemple exécuté sur (à peu près) les mêmes données que mon exemple eplot :

 [$]> 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|
-----------------------
 

Ajuster les bacs aide un peu la résolution:

 [$]> 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
    --------------------------------------------------------------------------------
 

6voto

Tyler Points 16516

gnuplot est la réponse définitive à votre question.

Personnellement, je suis également un grand fan de l' API Google Chart , accessible en ligne de commande à l'aide de wget (ou curl) pour télécharger un fichier png (et afficher avec xview ou similaire). J'aime cette option car je trouve les graphiques légèrement plus jolis (c'est-à-dire un meilleur antialiasing).

5voto

Thomas Kammeyer Points 2743

Vous devez utiliser gnuplot et assurez-vous d'exécuter la commande "définir le terme stupide" après le démarrage. Vous pouvez également donner une ligne et une colonne de comptage. Voici le résultat de gnuplot si vous émettez "définir le terme muet 64 10" et puis "plot sin(x)":


 1 ++-----------****-----------+--***-------+------****--++
 0.6 *+ **+ * +** * sin(x)*******++
 0.2 +* * * ** ** * **++
 0 ++* ** * ** * ** *++
 -0.4 ++** * ** ** * * *+
 -0.8 ++ ** * + * ** + * +** +*
 -1 ++--****------+-------***---+----------****-----------++
 -10 -5 0 5 10


Il ressemble plus à 79x24 (n'utilisez pas le 80e colonne sur un 80x24 affichage: certaines malédictions des implémentations ne sont pas toujours bien se comporter autour de la dernière colonne).

Je suis l'aide de gnuplot v4, mais cela doit fonctionner sur un peu plus âgés ou des versions plus récentes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X