Skip to content

stoqey/gnuplot

Repository files navigation

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!'); };