/chart-stream

Chart time series data from either STDIN or programmatically from any Node.js app in real time directly in your browser

Primary LanguageHTMLMIT LicenseMIT

chart-stream

Chart time series data from either STDIN or programmatically from any Node.js app in real time directly in your browser.

chart

Build status js-standard-style

Installation

Use from the command line:

npm install chart-stream -g

Use programmatically:

npm install chart-stream --save

CLI Usage

Pipe CSV data into STDIN of the chart-stream binary. Your default browser will then automatically be opened and the CSV data will be plotted live in a chart directly in your browser:

node examples/hyperbel.js | chart-stream

chart-stream expects the input to contain an optional header row followed by rows of numbers. If the optional header row is given, the headers will be used as labels in the chart. Each column of numbers will be plotted as a line in the graph.

Programmatic Usage

var chart = require('chart-stream')
var csvWriter = require('csv-write-stream')
var memoryUsage = require('memory-usage')

memoryUsage(2000)
  .pipe(csvWriter())
  .pipe(chart(ready))

function ready (url) {
  console.log('Open %s in your browser to see the chart', url)
}

API

The chart-stream module exposes a function which when called will return a writable stream and create an HTTP server which serves the chart. The function expects a callback as its only argument. The callback will be called with the URL for the chart.

When CSV data is written to the returned stream, the chart will be updated, plotting the data from the stream.

The stream expects an optional header row followed by rows of numbers. If the optional header row is given, the headers will be used as labels in the chart. Each column of numbers will be plotted as a line in the graph.

var chart = require('chart-stream')(function (url) {
  console.log('Open %s in your browser to see the chart', url)
})

chart.write('x*2,y/2')
plot(1, Math.pow(2, 30))

function plot (x, y) {
  chart.write(x + ',' + y)
  if (y <= 1) return
  setTimeout(plot, 100, x * 2, Math.round(y / 2))
}

License

MIT