gnuplot for node
@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 includelines
(default),points
andlinespoints
-
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!'); }; |