답변:
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
options are feed 79 24'
메시지는 무엇을 의미합니까? 그 높이와 너비입니까? 예를 확장하여 설정할 수 있습니까?
동안 gnuplot
강력 많은 포인트를 파이프하고 그래프를 얻으려고 할 때 정말 자극적입니다.
고맙게도 누군가 eplot을 만들었 습니다 (easy plot)을 .
터미널 그래프를 강제 실행하는 옵션이없는 것 같습니다. 나는 그렇게 패치했다.
--- 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
방금 실행 한 다른 옵션은 bashplotlib 입니다. 다음은 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|
-----------------------
출력 함을 조정하면 해상도가 약간 향상됩니다.
[$]> 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
--------------------------------------------------------------------------------
한 줄의 플롯은 실제로 간단하며 최고점과 최저점의 패턴을 보는 데 도움이 될 수 있습니다 . 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 )
feedgnuplot 은 gnuplot의 또 다른 프론트 엔드이며 데이터의 배관을 처리합니다.
$ 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
eplot
다른 답변에서 제안 된와 어떻게 비교 됩니까?
참조 : asciichart (Node.js, Python, Java, Go 및 Haskell에서 구현)
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 5 10
79x24에서 더 잘 보입니다 (80x24 디스플레이에서 80 번째 열을 사용하지 마십시오. 일부 curses 구현은 항상 마지막 열에서 제대로 작동하지는 않습니다).
gnuplot v4를 사용하고 있지만 약간 오래된 또는 최신 버전에서 작동합니다.
gnuplot의 또 다른 간단하고 가벼운 대안은 ervy입니다. 하는 NodeJS 기반 터미널 차트 도구입니다.
지원되는 유형 : 분산 (XY 포인트), 막대, 파이, 불릿, 도넛 및 게이지.
GitHub 리포지토리 프로젝트에서 다양한 옵션의 사용 예제를 찾을 수 있습니다.
python3을 사용하여 터미널에서 직접 데이터를 플롯 할 수 있는 패키지 plotext 를 확인하십시오 . 사용법은 matplotlib 패키지 와 매우 유사하므로 매우 직관적 입니다.
기본 예는 다음과 같습니다.
다음 명령으로 설치할 수 있습니다.
sudo -H pip install plotext
matplotlib의 경우 주요 기능은 분산 (단일 점의 경우), 플롯 (선으로 연결된 점의 경우) 및 표시 (실제로 터미널에 플롯을 인쇄하는 것)입니다. 플롯 치수, 포인트 및 선 스타일 및 축, 숫자 눈금 및 최종 방정식을 표시하는 모든 것을 쉽게 지정할 수 있습니다.이 좌표는 플롯 된 좌표를 원래의 실제 값으로 변환하는 데 사용됩니다.
위에 표시된 플롯을 생성하는 코드는 다음과 같습니다.
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)
clear=True
내부 옵션 show
은 플로팅하기 전에 터미널을 지우는 데 사용됩니다. 예를 들어 연속적인 데이터 흐름을 플로팅 할 때 유용합니다. 연속적인 데이터 흐름을 그리는 예는 다음과 같습니다.
패키지 설명 플롯을 사용자 정의하는 방법에 대한 정보를 제공합니다. 이 패키지는 Ubuntu 16에서 테스트되었으며 완벽하게 작동합니다. 향후 개발 (요청시)에는 python2 및 기타 그래픽 인터페이스 (예 : 목성) 로의 확장이 포함될 수 있습니다. 사용에 문제가 있으면 알려주십시오. 감사.
이것이 귀하의 문제에 답하기를 바랍니다.
다음은 터미널 출력에 -T 옵션을 추가하는 eplot 패치입니다.
--- eplot 2008-07-09 16:50:04.000000000 -0400
+++ eplot+ 2017-02-02 13:20:23.551353793 -0500
@@ -172,7 +172,10 @@
com=com+"set terminal postscript color;\n"
@o["DoPDF"]=true
- # ---- Specify a custom output file
+ when /^-T$|^--terminal$/
+ com=com+"set terminal dumb;\n"
+
+ # ---- Specify a custom output file
when /^-o$|^--output$/
@o["OutputFileSpecified"]=checkOptArg(xargv,i)
i=i+1
i=i+1
이것을 사용하면 eplot -T
gnuplot 창 대신 ASCII 그래픽 결과를 얻도록 실행할 수 있습니다 .
-d