chart
Quick & smart charting for STDIN
Learn by example!
Syntax
chart [options]
pie
: render a pie chartbar
: render a bar chartline
: render a line chartscatter
: render a scatter plot chartlog
: use logarithmic scale (bar chart only)legacy-color
: use legacy colorsgradient
: use color gradients' '|';'|','|'\t'
: this character separates columns on each line (\t = default)-t|--title
: title for the chart-x
: label for the x axis-y
: label for the y axis--date-format
: Sets the date format, according to https://golang.org/src/time/format.go--debug
: Use to make sure to double-check the chart is showing what you expect.-h|--help
: Show help--zero-based
: Makes y-axis begin at zero
Installation
go install github.com/marianogappa/chart@latest
or get the latest binary for your OS in the Releases section.
Example use cases
- Pie chart of your most used terminal commands
history | awk '{print $2}' | chart
- Bar chart of today's currency value against USD, in logarithmic scale
curl -s http://api.fixer.io/latest?base=USD | jq -r ".rates | to_entries| \
map(\"\(.key)\t\(.value|tostring)\")|.[]" | chart bar log -t "Currency value against USD"
- Bar chart of a Github user's lines of code per language (requires setting up an Access Token)
USER=???
ACCESS_TOKEN=???
curl -u $USER:$ACCESS_TOKEN -s "https://api.github.com/user/repos" | \
jq -r 'map(.languages_url) | .[]' | xargs curl -s -u $USER:$ACCESS_TOKEN | \
jq -r '. as $in| keys[] | [.+ " "]+[$in[.] | tostring] | add' | \
awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}' | \
awk '{print $2 "\t" $1}' | sort -nr | chart bar
- Line chart of the stargazers of this repo over time up to Jan 2017 (received some attention after the publication of this blogpost)
curl -s "https://api.github.com/repos/marianogappa/chart/stargazers?page=1&per_page=100" \
-H"Accept: application/vnd.github.v3.star+json" | \
jq --raw-output 'map(.starred_at) | .[]' | awk '{print NR "\t" $0}' | \
chart line --date-format 2006-01-02T15:04:05Z
Charting MySQL output
chart
works great with sql, or with any mysql -Nsre '...'
query.
I don't trust the chart is correct
Me neither. Add --debug
to double-check (e.g. some rows could be being ignored due to parse failures, separator could be incorrect, column types could be inferred wrongly).
$ cat /tmp/c | ./chart bar --debug
Lines read 3
Line format inferred ff
Lines used 3
Float column count 2
String column count 0
Date/Time column count 0
Chart type bar
Scale type linear
Separator [tab]
Details
chart
infers STDIN format by analysing line format on each line (doesn't infer separator though; defaults to\t
) and computing the winner format.- it uses the awesome ChartJS library to plot the charts.
- when input data is string-only,
chart
infers a "word frequency pie chart" use case. - should work on Linux/Mac/Windows thanks to open-golang.
Known issues
- Javascript's floating point messes up y-axis https://github.com/marianogappa/chart/v4/issues/15
- No histogram support (ChartJS doesn't provide it) https://github.com/marianogappa/chart/v4/issues/22
Contribute
PRs are greatly appreciated and are currently being merged.
If you have a use case that is not supported by chart
, I'd love to hear about it, but if it's too complex I'd recommend you to try gnuplot.
Development
-
Requires Go version >= 1.11 with module support for building and testing.
-
Requires Goreleaser for building and publishing releases.
-
See Makefile for build and test commands.