@rkesters/gnuplot

Node gnuplot

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
00Mar 23, 2021Nov 9, 2020Minified + gzip package size for @rkesters/gnuplot in KB

Readme

gnuplot for node

npm TypeScript compatible

@rkesters/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 @rkesters/gnuplot

Usage

import plot from "@srkesters/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 "@rkesters/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!'); };

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.