Real-time plots in 20 lines
The Plot Twists

© Lead Image © Volodymyr Horbovyy, 123rf.com
Use Gnuplot with command-line utilities.
Some excellent charting and plotting packages can be found, but if you're like me, you sometimes just want to do a quick dynamic test plot without a lot of custom setup. Gnuplot is a command-line charting utility that has been around for a while, and I was amazed how easy it was to get up and running. In only 20 lines of scripting code, I was able to create real-time line and bar charts.
In this article, I introduce Gnuplot with two dynamic examples: The first shows the status of Raspberry Pi I/O pins, and the second is a line chart of CPU diagnostics.
Getting Started
Gnuplot [1] can be installed on Linux, Windows, and macOS. To install Gnuplot on Ubuntu, enter:
sudo apt-get install gnuplot
Gnuplot is typically run as a command-line utility, but it can also be run manually, with the charting instructions and data values inserted inline. To plot four sets of data points in a line chart, you could enter:
$ gnuplot gnuplot> $Mydata << EOD # Now enter some data 2 1 3 1.5 4 2.1 5 3.3 EOD gnuplot> plot $Mydata with line
Data block names must begin with a $
character, which distinguishes them from other types of persistent variables. The end-of-data delimiter (EOD
here) can be any sequence of characters. For this example, the plot command creates a line chart from the $Mydata
variable (Figure 1).

Static Bar Chart
For a simple Gnuplot bar chart, you could plot the real-time status of Raspberry Pi general purpose input/output (GPIO) pins. A static bar chart presentation can be created with a data file (called gpio.dat
here):
# gpio.dat - data file for GPIO pin values # column1 = chart position, column2 = heading, column3 = value 0 GPIO2 0 1 GPIO3 1 2 GPIO4 1 # ...
To plot a bar chart (Figure 2), the fill style and bar width need to be defined. The using 1:3:xtic(2)
argument, shown in the next code block, configures the first column in the data file as the x position, the third column as the y value, and the second column as the x-axis labels. Use the interactive commands
$ gnuplot gnuplot> set style fill solid gnuplot> set boxwidth 0.5 gnuplot> plot "gpio.dat" using 1:3:xtic(2)with boxes title ""
to plot the file.

Real-Time Bar Chart
The previous example used a manually created gpio.dat
data file. The current status of GPIO pins can be found with the gpio
command-line utility [2]. For example, to get the status of GPIO pin 9, enter:
gpio read 9
By adding some Bash and an Awk script, you can create a gpio.dat
file:
$ gpio read 9 1 $ gpio read 9 | awk '{ print "9 GPIO9 " $1 }' 9 GPIO9 1 $ gpio read 9 | awk '{ print "9 GPIO9 " $1 }' >gpio.dat $ cat gpio.dat 9 GPIO9 1
To make a dynamic bar chart, create the gpio_bars.txt
Gnuplot script shown in Listing 1. The Gnuplot scripting language is quite powerful and supports a wide range of functions and control statements.
Listing 1
Dynamic Bar Chart
01 # Create a dynamic bar chart that reads GPIO pins every 5 seconds 02 # 03 set title "PI GPIO Data" 04 set boxwidth 0.5 05 set style fill solid 06 07 # Create a dummy file to get started without errors 08 system "echo '0 GPIO2 1' > gpio.dat" 09 10 plot "gpio.dat" using 1:3:xtic(2) with boxes title "" 11 12 while (1) { # make a new 'gpio.dat' every cycle with fresh data 13 system "echo '' > gpio.dat" 14 do for [i=2:29] { 15 j = i-2 # put first GPIO pin at position 0 16 system "gpio read " .i. " | awk '{ print \"" . j . " GPIO" . i . " \" $1 }' >> gpio.dat 17 } 18 replot 19 pause 5 20 }
Rather than manually adding lines for each GPIO pin status, a for
loop can iterate from pins 2 to 29 (lines 14-17). A system
command runs the GPIO utility and Bash commands (line 16). To refresh the data, use the replot
and pause
commands (lines 18 and 19), and enter
gnuplot -persist gpio_bars.txt
to run the script (Figure 3).

Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Direct Download
Read full article as PDF:
Price $2.95
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Find SysAdmin Jobs
News
-
OpenMandriva Lx 23.03 Rolling Release is Now Available
OpenMandriva "ROME" is the latest point update for the rolling release Linux distribution and offers the latest updates for a number of important applications and tools.
-
CarbonOS: A New Linux Distro with a Focus on User Experience
CarbonOS is a brand new, built-from-scratch Linux distribution that uses the Gnome desktop and has a special feature that makes it appealing to all types of users.
-
Kubuntu Focus Announces XE Gen 2 Linux Laptop
Another Kubuntu-based laptop has arrived to be your next ultra-portable powerhouse with a Linux heart.
-
MNT Seeks Financial Backing for New Seven-Inch Linux Laptop
MNT Pocket Reform is a tiny laptop that is modular, upgradable, recyclable, reusable, and ships with Debian Linux.
-
Ubuntu Flatpak Remix Adds Flatpak Support Preinstalled
If you're looking for a version of Ubuntu that includes Flatpak support out of the box, there's one clear option.
-
Gnome 44 Release Candidate Now Available
The Gnome 44 release candidate has officially arrived and adds a few changes into the mix.
-
Flathub Vying to Become the Standard Linux App Store
If the Flathub team has any say in the matter, their product will become the default tool for installing Linux apps in 2023.
-
Debian 12 to Ship with KDE Plasma 5.27
The Debian development team has shifted to the latest version of KDE for their testing branch.
-
Planet Computers Launches ARM-based Linux Desktop PCs
The firm that originally released a line of mobile keyboards has taken a different direction and has developed a new line of out-of-the-box mini Linux desktop computers.
-
Ubuntu No Longer Shipping with Flatpak
In a move that probably won’t come as a shock to many, Ubuntu and all of its official spins will no longer ship with Flatpak installed.