165

UNIX の優れたコマンドライン チャート作成/グラフ作成/プロット ツールはありますか? ASCII グラフに xy ポイントをプロットするものを探しています。

明確にするために、グラフをASCII(ascii-artスタイルなど)で出力するものを探しているので、Xを必要とせずにインタラクティブシェルセッションで使用できます.

4

14 に答える 14

145

gnuplotを試してください。非常に強力なグラフ作成の可能性があります。

次の方法で端末に出力できます。

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
于 2008-09-23T19:51:49.497 に答える
73

は強力ですがgnuplot、多数のポイントをパイプしてグラフを取得したいだけの場合は、非常にイライラします。

ありがたいことに、誰かがeplot (簡単なプロット) を作成してくれました。

端末グラフを強制するオプションがないようです。私は次のようにパッチを当てました:

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

使用例:

[$]> 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
于 2012-10-13T00:18:00.047 に答える
22

feedgnuplotは gnuplot のもう 1 つのフロント エンドで、データのパイピングを処理します。

    $ seq 5 | awk '{print 2*$1, $1*$1}' |
      feedgnuplot --lines --points --legend 0 "data 0" --title "Test plot" --y2 1 \
                  --terminal 'dumb 80,40' --exit

                                     Test plot

     10 ++------+--------+-------+-------+-------+--------+-------+------*A 25
        +       +        +       +       +       +        +       +    **#+
        |       :        :       :       :       :        : data 0+**A*** |
        |       :        :       :       :       :        :       :** #   |
      9 ++.......................................................**.##....|
        |       :        :       :       :       :        :    ** :#      |
        |       :        :       :       :       :        :  **   #       |
        |       :        :       :       :       :        :**   ##:      ++ 20
      8 ++................................................A....#..........|
        |       :        :       :       :       :      **:   #   :       |
        |       :        :       :       :       :    **  : ##    :       |
        |       :        :       :       :       :  **    :#      :       |
        |       :        :       :       :       :**      B       :       |
      7 ++......................................**......##................|
        |       :        :       :       :    ** :    ##  :       :      ++ 15
        |       :        :       :       :  **   :   #    :       :       |
        |       :        :       :       :**     : ##     :       :       |
      6 ++..............................*A.......##.......................|
        |       :        :       :    ** :     ##:        :       :       |
        |       :        :       :  **   :    #  :        :       :       |
        |       :        :       :**     :  ##   :        :       :      ++ 10
      5 ++......................**........##..............................|
        |       :        :    ** :      #B       :        :       :       |
        |       :        :  **   :    ## :       :        :       :       |
        |       :        :**     :  ##   :       :        :       :       |
      4 ++...............A.......###......................................|
        |       :      **:     ##:       :       :        :       :       |
        |       :    **  :   ##  :       :       :        :       :      ++ 5
        |       :  **    : ##    :       :       :        :       :       |
        |       :**    ##B#      :       :       :        :       :       |
      3 ++.....**..####...................................................|
        |    **####      :       :       :       :        :       :       |
        |  **## :        :       :       :       :        :       :       |
        B**     +        +       +       +       +        +       +       +
      2 A+------+--------+-------+-------+-------+--------+-------+------++ 0
        1      1.5       2      2.5      3      3.5       4      4.5      5

を実行して、Debian および Ubuntu にインストールできますsudo apt install feedgnuplot

于 2015-02-18T17:41:14.250 に答える
11

端末にデータを直接プロットできるようにするパッケージplottextを確認してください。構文がmatplotlibに非常に似ているため、非常に直感的です。

以下に基本的な例を示します。

import plotext as plt
y = plt.sin() # sinusoidal signal 
plt.scatter(y)
plt.title("Scatter Plot")
plt.show()

散布図

次のコマンドでインストールできます。

sudo -H pip install plotext

matplotlib に関して言えば、主な機能はscatter (単一点の場合)、plot (線で結ばれた点の場合)、およびshow (実際に端末にプロットを出力するため) です。プロットの寸法、点と線のスタイル、およびプロットされた座標を元の実数値に変換するために使用される軸、数値目盛り、および最終方程式を表示するものを指定するのは簡単です。

上記のプロットを生成するコードは次のとおりです。

import plotext.plot as plx
import numpy as np

l=3000
x=np.arange(0, l)
y=np.sin(4*np.pi/l*np.array(x))*np.exp(-0.5*np.pi/l*x)

plx.scatter(x, y, rows = 17, cols = 70)
plx.show(clear = 0)

**棒グラフをプロットすることもできます: 棒グラフ 画像

連続データ フローをプロットする例を次に示します。

データストリーム

インストールできます

pip install plotext

または:

pip install "plotext[image]" to use plotext with images.
于 2020-05-03T22:14:41.817 に答える
7

gnuplotは、あなたの質問に対する決定的な答えです。

私は個人的にgoogle chart APIの大ファンでもあります。コマンドラインから wget (または curl) を使用してアクセスし、png ファイルをダウンロード (および xview などで表示) できます。このオプションが気に入っているのは、グラフが少しきれいになる (つまり、アンチエイリアシングが改善される) からです。

于 2008-09-23T19:54:28.413 に答える
6

gnuplot のもう 1 つのシンプルで軽量な代替手段は、 NodeJSベースのターミナル チャート ツールである ervy です。

サポートされているタイプ: 散布図 (XY ポイント)、バー、パイ、ブレット、ドーナツ、ゲージ。

さまざまなオプションを使用した使用例は、プロジェクトのGitHub リポジトリにあります。

ここに画像の説明を入力

ここに画像の説明を入力

于 2018-11-27T10:16:33.287 に答える
5

gnuplot を使用し、起動後に必ずコマンド「set term dumb」を発行してください。行数と列数を指定することもできます。「set term dumb 64 10」を発行してから「plot sin(x)」を発行した場合の gnuplot の出力は次のとおりです。

 

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


79x24 の方が見栄えがします (80x24 ディスプレイでは 80 番目の列を使用しないでください。curses の実装によっては、最後の列の周りで常に適切に動作するとは限りません)。

私は gnuplot v4 を使用していますが、これは少し古いか新しいバージョンで動作するはずです。

于 2008-09-23T20:13:27.120 に答える
2

termplotlib (私のプロジェクトの 1 つ) が最近人気を集めているので、おそらくこれは一部の人にとっては役立つでしょう。

import termplotlib as tpl
import numpy

x = numpy.linspace(0, 2 * numpy.pi, 10)
y = numpy.sin(x)

fig = tpl.figure()
fig.plot(x, y, label="data", width=50, height=15)
fig.show()
    1 +---------------------------------------+
  0.8 |    **     **                          |
  0.6 |   *         **           data ******* |
  0.4 | **                                    |
  0.2 |*              **                      |
    0 |                 **                    |
      |                                   *   |
 -0.2 |                   **            **    |
 -0.4 |                     **         *      |
 -0.6 |                              **       |
 -0.8 |                       **** **         |
   -1 +---------------------------------------+
      0     1    2     3     4     5    6     7
于 2021-06-05T11:28:12.790 に答える