A text-based, no-dependencies, pip-installable, open-source charting utility in Python.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

PlainChart

A text-based, 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 text-based 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.