@stoqey/gnuplot

Node gnuplot

Usage no npm install needed!

<script type="module">
  import stoqeyGnuplot from 'https://cdn.skypack.dev/@stoqey/gnuplot';
</script>

README

gnuplot for node

npm TypeScript compatible

@stoqey/gnuplot is an easy to use node module to draw charts using gnuplot and ps2pdf. This module is based on Richard Meadows's node-plotter

Installation

Prerequisites:

# ubuntu
sudo apt-get install gnuplot

# alpine
apk add gnuplot

# mac
brew install gnuplot

To install package, just run:

npm install @stoqey/gnuplot

Usage

import plot from '@stoqey/gnuplot'

// with callback
plot({
    data:		[ 3, 1, 2, 3, 4 ],
    filename:	'output.png',
    finish: (error) => {

    }
});

// As promise
const plotted = await plot({
    data: [3, 1, 2, 3, 4],
    filename: 'output1.png',
});

Output format

This defaults to .png but specifing format: svg changes the output to .svg and format: pdf changes the output format to .pdf.

import plot from '@stoqey/gnuplot'

plot({
    data:		[ 3, 1, 2, 3, 4 ],
    filename:	'output.svg',
    format:		'svg'
});

Formatting

The following properties can be used:

  • title : Sets the title of the graph
  • xlabel : Sets the label on the x axis of the graph
  • ylabel : Sets the label on the y axis of the graph
  • logscale : Makes the y axis of the graph appear in a log scale
  • style : The style of the lines on the graph. Possibilites include lines (default), points and linespoints
  • nokey : Disables the graph key
  • hideSeriesTitle: Indicates if plot should include legend
  • margin: Sets margin if needed
  • xRange: Sets max and min values for the X axis
  • yRange: Sets max and min values for the Y axis
  • decimalsign: Specifies a custom decimal sign
  • yFormat: Specifies how to format values on the Y axis
  • font: Specify a custom font
  • fontSize: Font size
  • titleSize: Title font size
  • width: Plot width
  • height: Plot height
  • locale: Locale code (run 'set locale' for the exact value)

The following example shows these in use:

plot({
    title:		'example',
    data:		{ 't1' : { 1357162672: 22.2, 1357162782: 23, 1357162892: 24 } },
    time:		'hours',
    style:		'line',
    filename:	'test/output14.png',
    format:		'png',
    decimalsign: ',',
    yFormat: '%.2f USD',
    hideSeriesTitle: true,
    xlabel:		'Time',
    ylabel:		'Price',
    margin: 	{
        left: 10,
        right: 3,
        top: 3,
        bottom: 4
    },
    xRotate: {
        value: 45,
        yOffset: -1.5,
        xOffset: -2
    },
    hideSeriesTitle: true,
    xRange: {
        min: 0,
        max: 100
    }
});

Specifing X and Y values

plot({
    data:		{ 'line' : { 1: 5, 5: 6 } },
    filename:	'output.png'
});

Instead of specifing an array for data, you can specify an object with a named series inside.

Multiple Series

plot({
    data:		{ 'tick' : [ 3, 1, 2, 3, 4 ], 'line' : { 1: 5, 5: 6 } },
    filename:	'output.png'
});

Time Formatting

plot({
    data:		{ 'temperature' :
            { 1357162672: 22, 1357162782: 23, 1357162892: 24 } },
    time:		'hours',
    filename:	'output.png'
});

The x axis can be formatted as a time series if the x values are given as a unix time. The time property can be specified with the gnuplot time format.

Other options

The options object might additionally contain the following:

Option Description Example
exec Arguments for the gnuplot process options.exec = { cwd : '/home/user/images' };
finish Callback executed when the gnuplot process finishes options.finish = function(){ Console.log('Success!'); };