plainchart

A simple plain-text, no-dependencies, pip-installable, open-source charting utility in Python.


License
MIT
Install
pip install plainchart==0.2.1

Documentation

PlainChart

A simple plain-text, no-dependencies, pip-installable, open-source charting utility in Python.

Usage:

>>> import plainchart
>>> chart = plainchart.PlainChart([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9]) # 🥧
>>> print(chart.render())

     ▌     ▌
     ▌     ▌
     ▌     ▌
     ▌ ▌   ▌
    ▌▌ ▌▌ ▌▌
    ▌▌ ▌▌ ▌▌
  ▌ ▌▌ ▌▌ ▌▌
▌ ▌ ▌▌ ▌▌▌▌▌
▌ ▌ ▌▌▌▌▌▌▌▌
▌▌▌▌▌▌▌▌▌▌▌▌

Installation

To install PlainChart, you can use pipenv or pip:

$ pipenv install plainchart

Features

With PlainChart, you can:

  • render an array of values in a plain text chart
  • limit the height of the chart and have the values rendered accordingly
  • render a different style of chart, e.g., plainchart.PlainChart.bar or plainchart.PlainChart.scatter
  • implement your own style of chart, e.g., mean_html (see example below)

Examples

>>> import plainchart
>>> import random
>>>
>>> values = [random.randint(0, 10) for _ in range(100)]
>>> chart = plainchart.PlainChart(values)
>>>
>>> print(chart.render())

        ▌   ▌       ▌   ▌                         ▌                      ▌        ▌        ▌
  ▌     ▌   ▌   ▌▌  ▌   ▌  ▌                      ▌                   ▌  ▌        ▌        ▌
  ▌     ▌   ▌▌  ▌▌  ▌   ▌  ▌▌                     ▌   ▌    ▌▌  ▌   ▌  ▌  ▌     ▌  ▌    ▌   ▌       ▌
  ▌ ▌  ▌▌   ▌▌  ▌▌▌ ▌  ▌▌ ▌▌▌                 ▌   ▌   ▌    ▌▌  ▌  ▌▌  ▌  ▌   ▌ ▌  ▌  ▌ ▌   ▌       ▌
  ▌ ▌  ▌▌▌  ▌▌  ▌▌▌ ▌▌ ▌▌ ▌▌▌▌   ▌         ▌  ▌   ▌   ▌    ▌▌  ▌  ▌▌  ▌  ▌   ▌ ▌ ▌▌▌ ▌ ▌   ▌       ▌
  ▌ ▌  ▌▌▌  ▌▌  ▌▌▌ ▌▌ ▌▌ ▌▌▌▌   ▌▌        ▌  ▌   ▌ ▌ ▌    ▌▌  ▌  ▌▌  ▌ ▌▌   ▌ ▌▌▌▌▌▌▌ ▌▌▌ ▌       ▌
  ▌ ▌  ▌▌▌  ▌▌  ▌▌▌ ▌▌ ▌▌▌▌▌▌▌▌▌ ▌▌▌    ▌  ▌  ▌ ▌ ▌ ▌ ▌ ▌  ▌▌  ▌  ▌▌  ▌ ▌▌   ▌ ▌▌▌▌▌▌▌ ▌▌▌ ▌▌     ▌▌
  ▌ ▌ ▌▌▌▌ ▌▌▌ ▌▌▌▌ ▌▌▌▌▌▌▌▌▌▌▌▌ ▌▌▌  ▌ ▌  ▌  ▌ ▌▌▌ ▌ ▌ ▌▌ ▌▌▌ ▌  ▌▌▌ ▌ ▌▌   ▌▌▌▌▌▌▌▌▌ ▌▌▌ ▌▌   ▌ ▌▌
 ▌▌▌▌ ▌▌▌▌ ▌▌▌ ▌▌▌▌ ▌▌▌▌▌▌▌▌▌▌▌▌ ▌▌▌ ▌▌ ▌  ▌  ▌▌▌▌▌▌▌ ▌▌▌▌▌▌▌▌ ▌▌ ▌▌▌▌▌ ▌▌▌▌ ▌▌▌▌▌▌▌▌▌ ▌▌▌ ▌▌▌  ▌▌▌▌
▌▌▌▌▌ ▌▌▌▌ ▌▌▌▌▌▌▌▌ ▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌ ▌▌ ▌ ▌▌  ▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌ ▌▌▌▌▌▌▌▌▌▌▌▌▌▌ ▌▌▌▌▌▌▌▌▌▌▌▌▌
>>> import plainchart
>>> import math
>>> import numpy as np
>>>
>>> values = [1.3 + math.sin(x) for x in np.linspace(0, 4 * math.pi, num=100)]
>>> chart = plainchart.PlainChart(values, style=plainchart.PlainChart.scatter)
>>>
>>> print(chart.render())

         ××××××××                                          ×××××××
      ×××        ×××                                    ×××       ×××
    ××              ××                               ×××             ××
  ××                  ××                            ×                  ××
××                      ××                        ××                     ××                        ×
                          ×                     ××                         ××                    ××
                           ××                 ××                             ××                ××
                             ×××            ××                                 ××            ××
                                ×××     ××××                                     ××××    ××××
                                   ×××××                                             ××××

You can also implement your own style of chart. Below is an example of a HTML chart (mean_html.py) with different colors for values below and above the mean.

import plainchart
import random
import statistics

def mean_html(chart, value, y):
	mean = statistics.mean(chart.values)
	mean_y = chart.y(mean)
	value_y = chart.y(value)

	if value_y <= mean_y:

		if y <= value_y:
			return '<span style="color:green">▌</span>'

		return '<span style="color:white">▌</span>'

	else:

		if y <= mean_y:
			return '<span style="color:green">▌</span>'

		elif y <= value_y:
			return '<span style="color:red">▌</span>'

		return '<span style="color:white">▌</span>'

values = [random.randint(0, 10) for _ in range(100)]
chart = plainchart.PlainChart(values, style=mean_html)

print(chart.render(new_line='<br>'))
$ python mean_html.py > mean.html

Mean HTML chart

Contribute

Please feel free to open an issue to propose a new feature or point out a bug. You can also fork the PlainChart repository and submit a pull request.

Support

PlainChart is free and under the MIT License. To support its development, you can make a donation to cash.me/$gduverger.