কমান্ড-লাইন ইউনিক্স ASCII- ভিত্তিক চার্টিং / প্লট করার সরঞ্জাম


139

ইউনিক্স চার্টিং / গ্রাফিং / প্লট করার সরঞ্জামটি কি কোনও ভাল কমান্ড-লাইন আছে? আমি এমন কিছু সন্ধান করছি যা একটি ASCII গ্রাফে xy পয়েন্ট প্লট করবে।

কেবল স্পষ্ট করে বলার জন্য, আমি এমন কিছু সন্ধান করছি যা ASCII তে গ্রাফ আউটপুট করবে (যেমন আসকি-আর্ট শৈলী), তাই আমি এক্স এর প্রয়োজন ছাড়াই একটি ইন্টারেক্টিভ শেল সেশনে এটি ব্যবহার করতে পারি।


3
সরঞ্জাম রেক হিসাবে বন্ধ ভোটদান।
সিরো সান্তিলি :16 冠状 病 六四 事件 法轮功

উত্তর:


132

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

1
কী options are feed 79 24'বার্তা মানে? এটি কি উচ্চতা এবং প্রস্থ? আপনি সেট করতে আপনার উদাহরণ বাড়িয়ে দিতে পারেন?
einpoklum

3
@ আইনপোকলুম: এটি প্লটের ডিফল্ট আকার, যা চরিত্র কলাম এবং লাইনের ভিগা এনআরকে বোঝায়। (Gnuplot ডক্সে বোবা চেহারা)
এমিল ভ্রিজডাগস

64

gnuplotশক্তিশালী থাকাকালীন , আপনি যখন পয়েন্টের একগুচ্ছ পাইপ করতে চান এবং গ্রাফ পেতে চান তখন তা সত্যিই বিরক্তিকরও হয়।

ধন্যবাদ, কেউ এপলট তৈরি করেছেন (সহজ প্লট), যা আপনার জন্য সমস্ত বাজে কাজ পরিচালনা করে।

টার্মিনাল গ্রাফগুলিকে জোর করার কোনও বিকল্প বলে মনে হচ্ছে না; আমি এটি যেমন প্যাচ:

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

ঠিক আমি যা চেয়েছিলাম - গ্নুপ্লটকে পাইপিং করছি!
লিওনেল

1
এপলট এখনও কি সেই প্যাচ দরকার?
einpoklum

সর্বশেষ সংস্করণ 2007 সালে প্রকাশিত হয়েছিল, তাই হ্যাঁ। একটি ভাল প্যাচ যা আসলে মুক্তি পেতে পারে তাতে অন্য পতাকা যুক্ত করা এবং আচরণকে শর্তযুক্ত করার অন্তর্ভুক্ত থাকতে পারে তবে আমি এখনও এটি করার চেষ্টা করতে চাইনি।
জিওনগ চিয়ামিভ

2
আমি এই থ্রেডে প্রস্তাবিত প্যাচটি সহ গিথুবে এপলোটের একটি কাঁটাচামড়া রেখেছি এবং আইটার্ম 2 ইনলাইন চিত্র প্রদর্শনও করেছি। github.com/dandavison/eplot
ded7

9
আমি ক্রিশ্চিয়ান ওল্ফ, এপলট স্রষ্টা, একটি প্যাচ প্রেরণ করেছি এবং সে তা গ্রহণ করেছে। গিথুবে
pdbj

25

আরেকটি বিকল্প যা আমি সবেমাত্র চালিয়েছি তা হ'ল বাশপ্লটলিবআমার এপলট উদাহরণের মতো একই ডেটাতে (মোটামুটি) চালিত উদাহরণ এখানে রয়েছে :

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

18

একক লাইনের প্লটগুলি সত্যই সহজ এবং এটি উচ্চ এবং নিম্নের নিদর্শনগুলি দেখতে সহায়তা করতে পারে। পাইস্পারকালাইনগুলিও
দেখুন । (কেউ কি ইউনিকোড স্লান্টিং লাইনগুলি জানেন, যা বার, প্লট নয়, লাইন তৈরির জন্য একসাথে উপযুক্ত হতে পারে?)

#!/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 )

17

ফিডনুপ্লট 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এটি অন্য উত্তরের সাথে পরামর্শের সাথে কীভাবে তুলনা করে ?
einpoklum


6

gnuplot আপনার প্রশ্নের সুনির্দিষ্ট উত্তর।

আমি ব্যক্তিগতভাবে গুগল চার্ট এপিআইয়ের একটি বড় অনুরাগী , যা একটি পিএনজি ফাইল ডাউনলোড করার জন্য উইজেটের (বা কার্ল) সাহায্যে কমান্ড লাইন থেকে অ্যাক্সেস করা যায় (এবং এক্সভিউ বা অনুরূপ কিছু দিয়ে দেখুন)। আমি এই বিকল্পটি পছন্দ করি কারণ আমি চার্টগুলি কিছুটা সুন্দর দেখতে পেয়েছি (অর্থাত্ আরও ভাল প্রতিরোধক)।


1
Google চিত্র চার্ট এপিআই অবচিত কিন্তু আশ্চর্যজনক।
Bonh

5

আপনার gnuplot ব্যবহার করা উচিত এবং শুরু করার পরে "সেট টার্ম ডাম্ব" কমান্ডটি নিশ্চিত করা উচিত। আপনি একটি সারি এবং কলাম গণনাও দিতে পারেন। আপনি "সেট টার্ম বোবা 64 10" এবং তারপরে "প্লট সিন (এক্স)" জারি করলে জিনুপ্লট থেকে আউটপুটটি এখানে রয়েছে:

 

    1 ++ ----------- **** ----------- + - *** ------- + ------ * *** - ++,
  0.6 * + ** + * + ** * পাপ (এক্স) ******* ++
  0.2 + * * * ** ** * ** ++
    0 ++ * ** ** ** ** * ++
 -0.4 ++ ** ** ** * * * + +
 -0.8 ++ ** * + * ** + * + ** + *
   -1 ++ - **** ------ + ------- *** --- + ---------- **** ----- ------ ++,
     -10 -5 0 5 10


এটি 79x24 এ আরও ভাল দেখাচ্ছে (80x24 ডিসপ্লেতে 80 তম কলামটি ব্যবহার করবেন না: কিছু শাপের বাস্তবায়ন সর্বদা শেষ কলামের চারপাশে ভাল আচরণ করে না)।

আমি gnuplot ভি 4 ব্যবহার করছি, তবে এটি কিছুটা পুরানো বা নতুন সংস্করণে কাজ করা উচিত।


4

জ্নুপ্লটের আরও একটি সহজ / হালকা বিকল্প হ'ল অর্ভি , একটি নোডজেএস ভিত্তিক টার্মিনাল চার্ট সরঞ্জাম।

সমর্থিত প্রকারগুলি: স্ক্যাটার (এক্সওয়াই পয়েন্ট), বার, পাই, বুলেট, ডোনাট এবং গেজ।

বিভিন্ন বিকল্পের সাথে ব্যবহারের উদাহরণগুলি গিটহাব রেপোতে পাওয়া যাবে

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


3

প্যাকেজ প্লোটেক্সট পরীক্ষা করুন যা পাইথন 3 ব্যবহার করে টার্মিনালে সরাসরি ডেটা প্লট করতে দেয়। এটি খুব স্বজ্ঞাত যেহেতু এটির ব্যবহার ম্যাটপ্ল্লোলিব প্যাকেজের সাথে খুব মিল ।

এখানে একটি প্রাথমিক উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

আপনি নিম্নলিখিত কমান্ড দিয়ে এটি ইনস্টল করতে পারেন:

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ব্যবহার করা হয়: উদাহরণস্বরূপ, যখন ডেটার অবিচ্ছিন্ন প্রবাহের প্লট করা হয় তখন এটি দরকারী। অবিচ্ছিন্ন ডাটা প্রবাহের চক্রান্ত করার উদাহরণ এখানে দেখানো হয়েছে: এখানে চিত্র বর্ণনা লিখুন

প্যাকেজ বর্ণনা আরও তথ্যের চক্রান্ত কাস্টমাইজ কিভাবে প্রদান করে। প্যাকেজটি উবুন্টু 16 তে পরীক্ষা করা হয়েছে যেখানে এটি পুরোপুরি কার্যকর হয়। ভবিষ্যতের সম্ভাব্য বিকাশ (অনুরোধের ভিত্তিতে) পাইথন 2 এবং অন্যান্য গ্রাফিকাল ইন্টারফেসগুলিতে (যেমন বৃহস্পতি) সম্প্রসারণ জড়িত থাকতে পারে। আপনার যদি এটি ব্যবহার করে কোনও সমস্যা থাকে তবে আমাকে জানান। ধন্যবাদ।

আমি আশা করি এটি আপনার সমস্যার জবাব দেয়।



1

এখানে এপলটের জন্য আমার প্যাচ যা টার্মিনাল আউটপুটটির জন্য একটি-টি বিকল্প যুক্ত করে:

--- 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জিনুপ্লট উইন্ডোর পরিবর্তে ASCII- গ্রাফিক্স ফলাফল পেতে চালাতে পারেন ।


1
এপলট-এর এখন বিল্ট-ইন রয়েছে-d
সর্বোচ্চ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.