python - टर्मिनल में पायथन ASCII भूखंड



matplotlib (6)

मैंने अभी asciiplotlib जारी किया है जो उम्मीद करनी चाहिए कि आपका जीवन यहां बहुत आसान हो। लाइन प्लॉट्स के लिए, आपको gnuplot और asciiplotlib इंस्टॉल करने की आवश्यकता है,

pip install asciiplotlib

इसके बाद, लाइन प्लॉट बस के साथ उत्पन्न होते हैं

import asciiplotlib as apl
import numpy

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

fig = apl.figure()
fig.plot(x, y, label="data", width=50, height=15)
fig.show()
    1 +-----------------------------------------------------------+
      |        **      +A**     +       +        +       +        |
  0.8 |-+    **            *                         data ***A***-|
  0.6 |-+   A               **                                  +-|
      |    *                                                      |
  0.4 |-+**                   A                                 +-|
  0.2 |-*                      *                                +-|
      |*                        *                                 |
    0 |-+                        *                          A   +-|
      |                           *                        *      |
 -0.2 |-+                          *                     **     +-|
 -0.4 |-+                           A**                 *       +-|
      |                                *               *          |
 -0.6 |-+                               **           *A         +-|
 -0.8 |-+                                          **           +-|
      |        +       +        +       + A***** **      +        |
   -1 +-----------------------------------------------------------+
      0        1       2        3       4        5       6        7

ऑक्टेव के साथ मैं टर्मिनल के लिए सरणी प्लॉट करने में सक्षम हूं, उदाहरण के लिए, फ़ंक्शन x^2 मानों के साथ सरणी को साजिश करने से यह टर्मिनल मेरे आउटपुट में देता है:

   10000 ++---------+-----------+----------+-----------+---------++
         ++         +           +          +           +         ++
         |+         :           :          :           :         +|
         |++        :           :          :           :        ++|
         | +        :           :          :           :        + |
         | ++       :           :          :           :       ++ |
    8000 ++.+..................................................+.++
         |  ++      :           :          :           :      ++  |
         |   ++     :           :          :           :     ++   |
         |    +     :           :          :           :     +    |
         |    ++    :           :          :           :    ++    |
         |     +    :           :          :           :    +     |
    6000 ++....++..........................................++....++
         |      ++  :           :          :           :  ++      |
         |       +  :           :          :           :  +       |
         |       ++ :           :          :           : ++       |
         |        ++:           :          :           :++        |
    4000 ++........++..................................++........++
         |          +           :          :           +          |
         |          ++          :          :          ++          |
         |          :++         :          :         ++:          |
         |          : ++        :          :        ++ :          |
         |          :  ++       :          :       ++  :          |
    2000 ++.............++........................++.............++
         |          :    ++     :          :     ++    :          |
         |          :     +++   :          :   +++     :          |
         |          :       ++  :          :  ++       :          |
         |          :        +++:          :+++        :          |
         +          +          ++++      ++++          +          +
       0 ++---------+-----------+----------+-----------+---------++
         0        20000       40000      60000       80000     100000

क्या कोई तरीका है कि मैं पाइथन में कुछ ऐसा कर सकता हूं, विशेष रूप से matplotlib के साथ? bashplotlib इस कार्यक्षमता में से कुछ प्रदान करता प्रतीत होता है लेकिन ऑक्टेव की पेशकश की तुलना में काफी बुनियादी प्रतीत होता है।


यदि आप matplotlib से बाध्य हैं, तो जवाब वर्तमान में नहीं है। वर्तमान में, matplotlib में कई backends , लेकिन ASCII उनमें से एक नहीं है।


जैसा कि @ बेंजामिन बारेनब्लैट ने बताया, वर्तमान में matplotlib का उपयोग करने का कोई तरीका नहीं है। यदि आप वास्तव में शुद्ध पायथन पुस्तकालय का उपयोग करना चाहते हैं, तो आप एएससीआईआई प्लॉटर की जांच कर सकते हैं। हालांकि, जैसा कि मैंने उपरोक्त टिप्पणी की है, मैं this प्रश्न में सुझाए गए अनुसार gnuplot उपयोग करूंगा।

सीधे पाइथन से gnuplot का उपयोग करने के लिए आप या तो Gnuplot.py उपयोग कर सकते हैं (मैंने अभी तक इसका परीक्षण नहीं किया है) या स्क्रिप्टिंग इंटरफ़ेस के साथ gnuplot का उपयोग करें। लेटर को महसूस किया जा सकता है (जैसा कि here ) जैसे:

import numpy as np
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
import subprocess
gnuplot = subprocess.Popen(["/usr/bin/gnuplot"], 
                           stdin=subprocess.PIPE)
gnuplot.stdin.write("set term dumb 79 25\n")
gnuplot.stdin.write("plot '-' using 1:2 title 'Line1' with linespoints \n")
for i,j in zip(x,y):
   gnuplot.stdin.write("%f %f\n" % (i,j))
gnuplot.stdin.write("e\n")
gnuplot.stdin.flush()

यह एक साजिश देता है

    1 ++--------+---A******---------+--------+---------+---------+--------++
      +         + **      +A*       +        +         +      Line1 **A*** +
  0.8 ++        **           *                                            ++
      |       **              **                                           |
  0.6 ++     A                  *                                         ++
      |     *                    *                                         |
  0.4 ++   *                                                              ++
      |  **                       A                                        |
  0.2 ++*                          *                                      ++
      |*                            *                                      |
    0 A+                             *                              A     ++
      |                               *                            *       |
 -0.2 ++                               *                          *       ++
      |                                 A*                      **         |
 -0.4 ++                                  *                    *          ++
      |                                    **                 *            |
 -0.6 ++                                     *               A            ++
      |                                       *            **              |
 -0.8 ++                                                 **               ++
      +         +         +         +        + A****** **        +         +
   -1 ++--------+---------+---------+--------+--------A+---------+--------++
      0         1         2         3        4         5         6         7

कुछ स्टाइल विकल्प here मिल सकते हैं उदाहरण के लिए।


आप प्लॉट्स के लिए सिम्पी के TextBackend को भी आजमा सकते हैं, doc देखें। या बस textplot उपयोग textplot

यहां यह एक उदाहरण है

from sympy import symbols
from sympy.plotting import textplot
x = symbols('x')
textplot(x**2,0,5)

आउटपुट के साथ

24.0992 |                                                      / 
        |                                                    ..  
        |                                                   /    
        |                                                 ..     
        |                                               ..       
        |                                              /         
        |                                            ..          
        |                                          ..            
12.0496 | ---------------------------------------..--------------
        |                                     ...                
        |                                   ..                   
        |                                 ..                     
        |                              ...                       
        |                           ...                          
        |                        ...                             
        |                   .....                                
        |              .....                                     
      0 | .............                                          
          0                      2.5                        5    

चूंकि कुछ उत्तरों पहले से ही सुझाव देते हैं कि gnuplot एक शानदार विकल्प है।

हालांकि, एक gnuplot subprocess को कॉल करने की कोई आवश्यकता नहीं है, यह एक पायथन gnuplotlib पुस्तकालय का उपयोग करना अधिक आसान हो सकता है।

उदाहरण (से: https://github.com/dkogan/gnuplotlib ):

>>> import numpy as np
>>> import gnuplotlib as gp

>>> x = np.linspace(-5,5,100)

>>> gp.plot( x, np.sin(x) )
[ graphical plot pops up showing a simple sinusoid ]


>>> gp.plot( (x, np.sin(x), {'with': 'boxes'}),
...          (x, np.cos(x), {'legend': 'cosine'}),

...          _with    = 'lines',
...          terminal = 'dumb 80,40',
...          unset    = 'grid')

[ ascii plot printed on STDOUT]
   1 +-+---------+----------+-----------+-----------+----------+---------+-+
     +     +|||+ +          +         +++++   +++|||+          +           +
     |     |||||+                    +     +  +||||||       cosine +-----+ |
 0.8 +-+   ||||||                    +     + ++||||||+                   +-+
     |     ||||||+                  +       ++||||||||+                    |
     |     |||||||                  +       ++|||||||||                    |
     |     |||||||+                +        |||||||||||                    |
 0.6 +-+   ||||||||               +         +||||||||||+                 +-+
     |     ||||||||+              |        ++|||||||||||                   |
     |     |||||||||              +        |||||||||||||                   |
 0.4 +-+   |||||||||              |       ++||||||||||||+                +-+
     |     |||||||||             +        +||||||||||||||                  |
     |     |||||||||+            +        |||||||||||||||                  |
     |     ||||||||||+           |       ++||||||||||||||+           +     |
 0.2 +-+   |||||||||||          +        |||||||||||||||||           +   +-+
     |     |||||||||||          |        +||||||||||||||||+          |     |
     |     |||||||||||         +         ||||||||||||||||||         +      |
   0 +-+   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   +-+
     |       +        ||||||||||||||||||+         |       ++||||||||||     |
     |       |        +|||||||||||||||||          +        |||||||||||     |
     |       +        ++||||||||||||||||          |        +||||||||||     |
-0.2 +-+      +        |||||||||||||||||          +        |||||||||||   +-+
     |        |        ++||||||||||||||+           |       ++|||||||||     |
     |        +         |||||||||||||||            +        ++||||||||     |
     |         |        +||||||||||||||            +         |||||||||     |
-0.4 +-+       +        ++||||||||||||+             |        +||||||||   +-+
     |          +        |||||||||||||              +        |||||||||     |
     |          |        +|||||||||||+               +       ++|||||||     |
-0.6 +-+        +        ++||||||||||                |        +|||||||   +-+
     |           +        |||||||||||                +        ++||||||     |
     |           +        +|||||||||+                 +        |||||||     |
     |            +       ++||||||||                  +       +++|||||     |
-0.8 +-+          +      + ++||||||+                   +      + +|||||   +-+
     |             +    +   +||||||                     +    +  ++||||     |
     +           +  +  ++   ++|||++     +           +   ++  +  + ++|||     +
  -1 +-+---------+----------+-----------+-----------+----------+---------+-+
    -6          -4         -2           0           2          4           6

चलो नाम सूची में आपके पास नाम दें। कोई सूची सूची को एक numpy array परिवर्तित कर सकते हैं। और, सूची में चुने गए आइटम की अनुक्रमणिका प्राप्त करने के लिए numpy.where का उपयोग करें। निम्नलिखित तरीका है जिसमें आप इसे लागू करेंगे।

 import numpy as np lst = ["foo", "bar", "baz"] #lst: : 'list' data type lst_np = np.array(lst) #lst_np: 'numpy.ndarray' index = np.where( lst_np == 'bar')[0][0] #index: 'numpy.int64' data type print index 1 




python matplotlib