Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tool3/chartscii
π create beautiful ascii charts
https://github.com/tool3/chartscii
ascii ascii-chart chart javascript npm-package
Last synced: 2 months ago
JSON representation
π create beautiful ascii charts
- Host: GitHub
- URL: https://github.com/tool3/chartscii
- Owner: tool3
- License: mit
- Created: 2020-02-19T06:12:31.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-06-10T07:13:26.000Z (8 months ago)
- Last Synced: 2024-11-21T21:42:26.493Z (2 months ago)
- Topics: ascii, ascii-chart, chart, javascript, npm-package
- Language: TypeScript
- Homepage:
- Size: 5.5 MB
- Stars: 37
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ascii - chartscii
README
# Chartscii 3.0!
![](./shellfies/chartscii_main.png)
[![](https://img.shields.io/static/v1?label=created%20with%20shellfie&message=πΈ&color=pink)](https://github.com/tool3/shellfie)
for command line usage see: [chartscii-cli](https://github.com/tool3/chartscii-cli)
Chartscii was rewritten from scratch in TypeScript!
It includes many new features, improvements and rich formatting capabilities.# Whatβs new
β Full width and height control.
β New `padding` and `barSize` options!
β New `orientation` option! vertical charts are here!
β New rich styl3 formatting support!
β New Emoji characters support! [\*](#unicode-issues)# install
```bash
npm install chartscii
```# usage
`chartscii` accepts an array of data objects, with optional labels, and outputs an ascii bar chart.
## usage example
```typescript
import Chartscii from "chartscii";const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const options = {
title: "chartscii",
width: 50,
theme: "pastel",
color: "pink",
colorLabels: true,
barSize: 2,
orientation: "vertical"
};
const chart = new Chartscii(data, options);
console.log(char.create());
```![](./shellfies/chartscii_simple.png)
# Input
Chartscii accepts an array of data points to draw the chart.
This can be an array of numbers, or an array of chart points as explained below.
## number[]
If you provide an array of numbers, chartscii will draw each bar using the provided values.
Value is scaled to width/height of chart, depending on the orientation option.
### example
```tsx
import Chartscii from "chartscii";const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const chart = new Chartscii(data);
console.log(chart.create());
```![](./shellfies//chartscii_dead_simple.png)
## ChartPoint[]
For maximum flexibility, provide an array of chart points. This will allow you to customize the following properties:
| name | description | type | default |
| ----- | ----------- | ------ | ------------- |
| label | bar label | string | point.value |
| value | bar value | number | N/A |
| color | bar color | string | options.color |### example
```tsx
import Chartscii from "chartscii";const data = [
{ label: "label", value: 2, color: "pink" },
{ label: "label", value: 2, color: "purple" },
{ label: "label", value: 2, color: "marine" }
];
const chart = new Chartscii(data, { colorLabels: true, valueLabels: true });
console.log(chart.create());
```![](./shellfies/chartscii_chartpoint.png)
# Options
You can customize the look and size of the chart, as well as rich formatting for labels provided by `styl3`.
## default options
Chartscii accepts customization options as a second argument and will merge the provided options with the following one:
```tsx
const options: ChartOptions = {
percentage: false,
colorLabels: false,
sort: false,
reverse: false,
naked: false,
labels: true,
color: undefined,
fill: undefined,
width: 100,
height: 10,
padding: 0,
barSize: 1,
title: "",
char: "β",
orientation: "horizontal",
theme: "",
structure: {
x: "β",
y: "β’",
axis: "β",
topLeft: "β",
bottomLeft: "β"
}
};
```## customization options
| name | description | type | default |
| ----------- | ----------------------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------- |
| percentage | calculate and show percentage data | `boolean` | `false` |
| colorLabels | color labels with provided color per label, or color provided to option | `boolean` | `false` |
| valueLabels | show values of each bar | `boolean` | `false` |
| sort | sort the input data | `boolean` | `false` |
| reverse | reverse the input data | `boolean` | `false` |
| naked | donβt print chart structure ascii characters | `boolean` | `false` |
| labels | show labels | `boolean` | `true` |
| color | fallback color or unified char bars color | `string` | `undefined` |
| fill | use this character to fill remaining chart bar space | `string` | `undefined` |
| scale | values are scaled proportionate to this value. otherwise the max will be calculated from the provided data. | `number` or `string` | `auto` |
| width | width of chart | `number` | `100` |
| height | height of chart | `number` | `10` |
| padding | padding between bars | `number` | `0` |
| barSize | size of each bar | `number` | `1` |
| title | chart title | `string` | `undefined` |
| char | use this character to draw the chart bars | `string` | `β` |
| orientation | horizontal or vertical | `string` | `horizontal` |
| theme | `styl3`'s [themes](https://github.com/tool3/styl3?tab=readme-ov-file#themes) | `string` | `undefined` |
| structure | use these characters to draw the enclosing chart borders. | `object` | `{ x: 'β', y: 'β’', bottomLeft: 'β', axis: 'β', topLeft: 'β' }` |## chartscii + styl3 = β€οΈ
You can use `styl3`βs [formatting](https://github.com/tool3/styl3?tab=readme-ov-file#map) for cool themes, built-in color names and rich label formatting.
You should check out `styl3` for a full list of customization options.
### example
```tsx
const colors = [
"red",
"green",
"yellow",
"blue",
"purple",
"pink",
"cyan",
"orange"
];const data = [];
for (let i = 0; i < colors.length; i++) {
const color = colors[i];
data.push({ value: i + 1, color, label: `@invert ${i}@`, theme: "pastel" });
}const chart = new Chartscii(data, {
fill: "β",
colorLabels: true,
orientation: "vertical"
});console.log(chart.create());
```![](./shellfies/chartscii_styl3.png)
# examples
here are some examples of charts using `styl3`'s formatting on the chart labels.
> [!TIP]
> you can run more examples from the `./examples/` directory of this repository using `ts-node`.
> for example `npx ts-node examples/loaders.ts`## vertical
| options | chart |
| --------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| beach theme with italic and bold labels with a bar size of 2 | ![](./shellfies/vertical/chartscii_beach_italic_bold_barsize.png) |
| pastel theme with bold and underlined labels with padding of 2 | ![](./shellfies/vertical/chartscii_pastel_bold_underline_padding.png) |
| lush theme with strikedout labels no padding and emoji | ![](./shellfies/vertical/chartscii_lush_strikeout_emoji.png) |
| lush theme with underlined labels no padding and no axis structure char | ![](./shellfies/vertical/chartscii_lush_underline_no_axis_structure.png) |
| standard theme with dimmed and italic labels and padding 1 | ![](./shellfies/vertical/chartscii_standard_dimmed_italic_padding_structure.png) |
| pastel theme with inverted and underlined labels with a dark fill character | ![](./shellfies/vertical/chartscii_pastel_inverted_underline_dark_fill.png) |## horizontal
| options | chart |
| --------------------------------------------------------------------- | ------------------------------------------------------------------- |
| pastel theme with bold labels and percentage | ![](./shellfies/horizontal/chartscii_pastel_bold_percentage.png) |
| lush theme with inverted labels and naked chart | ![](./shellfies/horizontal/chartscii_pastel_lush_invert_naked.png) |
| beach theme with underlined labels and different structure characters | ![](./shellfies/horizontal/chartscii_beach_underline_structure.png) |
| pastel theme with padding of 1 and custom char | ![](./shellfies/horizontal/chartscii_pastel_char.png) |
| pastel theme with naked chart to create multiple loaders | ![](./shellfies/horizontal/chartscii_loaders.png) |# Unicode issues
Unfortunately, there are some known issues with specific unicode characters width.
This means that some emoji/unicode characters renders as 2 characters wide (or more) instead of 1, which is not a problem in itself.
The problem is that Javscript determines this length as 1, which creates an issue with label alignment, or drawing the chart bars correctly.> [!WARNING]
> If you have issues with label alignment, or the chart bars aren't spaced correctly - you are probably using an emoji/unicode character which produce the wrong width in javascript.If you encounter this issue unfortunately the current solution is to simply use a different emoji.
(For example: π₯ works well while β will result in a misaligned chart).
PRs for this problem are more than welcome.