[unix] 커맨드 라인 유닉스 ASCII 근거한 도표로 만드는 / 음모를 꾸미는 공구


Answers

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
Question

거기에 좋은 명령 줄 유닉스 차트 / 그래프 / 음모 도구가 있습니까? 나는 ASCII 그래프에 xy 점을 그릴 무언가를 찾고있다.

명확히하기 위해 ASCII로 그래프를 출력 할 무언가를 찾고 있습니다. 따라서 X를 사용하지 않고도 대화 형 쉘 세션에서 사용할 수 있습니다.




gnuplot 은 여러분의 질문에 대한 명확한 답변입니다.

나는 개인적으로 wget (또는 컬)의 도움을 받아 명령 줄에서 png 파일을 다운로드하고 (xview 또는 비슷한 것으로 볼 수있는) Google 차트 API 의 큰 팬이다. 차트를 약간 더 예쁘게 (예 : 더 좋은 앤티 엘리 어싱) 찾을 수 있기 때문에이 옵션이 마음에 듭니다.




gnuplot을 사용하고 시작한 후 "term term dumb"명령을 실행해야합니다. 행과 열 수를 줄 수도 있습니다. 다음은 "term term dumb 64 ​​10"을 발행하고 "sin sin (x)"을 출력하면 gnuplot의 결과입니다 :

 

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


79x24에서 더 잘 보입니다 (80x24 디스플레이에서 80 번째 열을 사용하지 마십시오 : 일부 커스 구현은 마지막 열 주변에서 항상 잘 동작하지는 않습니다).

gnuplot v4를 사용하고 있습니다. 그러나이 버전은 약간 오래된 버전이나 새로운 버전에서 작동합니다.




한 줄로 된 그림은 정말 간단하며 최고 / 최저 패턴을 수 있습니다.
pysparklines 참조하십시오.
(유니 코드 기울어 진 라인을 아는 사람이 있습니까? 라인이 아닌 막대가 아닌 플롯을 만들기 위해 함께 사용할 수 있습니까?)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import division
import numpy as np

__version__ = "2015-01-02 jan  denis"


#...............................................................................
def onelineplot( x, chars=u"▁▂▃▄▅▆▇█", sep=" " ):
    """ numbers -> v simple one-line plots like

f ▆ ▁ ▁ ▁ █ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁  osc 47  ▄ ▁ █ ▇ ▄ ▆ ▅ ▇ ▇ ▇ ▇ ▇ ▄ ▃ ▃ ▁ ▃ ▂  rosenbrock
f █ ▅ █ ▅ █ ▅ █ ▅ █ ▅ █ ▅ █ ▅ █ ▅ ▁ ▁ ▁ ▁  osc 58  ▂ ▁ ▃ ▂ ▄ ▃ ▅ ▄ ▆ ▅ ▇ ▆ █ ▇ ▇ ▃ ▃ ▇  rastrigin
f █ █ █ █ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁  osc 90  █ ▇ ▇ ▁ █ ▇ █ ▇ █ ▇ █ ▇ █ ▇ █ ▇ █ ▇  ackley

Usage:
    astring = onelineplot( numbers [optional chars= sep= ])
In:
    x: a list / tuple / numpy 1d array of numbers
    chars: plot characters, default the 8 Unicode bars above
    sep: "" or " " between plot chars

How it works:
    linscale x  ->  ints 0 1 2 3 ...  ->  chars ▁ ▂ ▃ ▄ ...

See also: https://github.com/RedKrieg/pysparklines
    """

    xlin = _linscale( x, to=[-.49, len(chars) - 1 + .49 ])
        # or quartiles 0 - 25 - 50 - 75 - 100
    xints = xlin.round().astype(int)
    assert xints.ndim == 1, xints.shape  # todo: 2d
    return sep.join([ chars[j] for j in xints ])


def _linscale( x, from_=None, to=[0,1] ):
    """ scale x from_ -> to, default min, max -> 0, 1 """
    x = np.asanyarray(x)
    m, M = from_ if from_ is not None \
        else [np.nanmin(x), np.nanmax(x)]
    if m == M:
        return np.ones_like(x) * np.mean( to )
    return (x - m) * (to[1] - to[0]) \
        / (M - m)  + to[0]


#...............................................................................
if __name__ == "__main__":  # standalone test --
    import sys

    if len(sys.argv) > 1:  # numbers on the command line, may be $(cat myfile)
        x = map( float, sys.argv[1:] )
    else:
        np.random.seed( 0 )
        x = np.random.exponential( size=20 )

    print onelineplot( x )



Related