Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

A command line tool for plotting data from text files

Project Description

A command-line tool for creating plots from data in text files.


With pip:

pip install lmj.plot

Or, clone this repository and put the plot script somewhere in your PATH:

git clone
cd py-plot
python develop


Let’s say you’re running an experimental algorithm, and you put accuracy values in a log file as the experiments run. Here’s a snippet from an example log file:

D 2012-03-19 15:02:35,181 decoded p-a-n-c-r-e-a-t-i-c in 4058ms
D 2012-03-19 15:02:35,365 tags p-ae2-n-k-r-iy0-ae1-t-ih0-k, best p-ae1-n-k-er0-_-eh1-th-iy0-_
D 2012-03-19 15:02:35,591 averaged 22932 weights in 786ms
D 2012-03-19 15:02:35,802 decoded g-y-r in 998ms
D 2012-03-19 15:02:36,054 tags jh-ay1-r, best g-_-er0
I 2012-03-19 15:02:36,055 training accuracy: 39.63
D 2012-03-19 15:02:36,246 averaged 23056 weights in 643ms
D 2012-03-19 15:02:36,295 decoded s-p-i-t-z-l-e-y in 4090ms
D 2012-03-19 15:02:36,540 tags s-p-ih1-t-s-l-_-iy0, best s-p-ey1-t-ah0-l-_-iy0

All of those “training accuracy” lines hidden in there will give us a good idea of how well the algorithm is performing. To get a quick plot of them:

cat ~/Experiments/tagger-beam1.log | lmj-plot -m \
    'training accuracy: (\S+)'

If you have your matplotlib configured with an interactive backend, you should see a nice little plot appear.

The general usage of the script is:

lmj-plot [--match RE] --input FILE

Basically, you provide a bunch of data in some sort of file (defaults to stdin), and, optionally, a regular expression that specifies how to extract data from the files. The plotting script will check the regular expression against each input line, parsing out numerical values from those that match. Each matched value will be included in the plot.

Multiple values

If you just provide one match group in your regular expression, the matched values will be plotted on the ordinate, in data-file order. If you want explicit control over the abscissa, just include another match group in your regular expression:

nl ~/Experiments/tagger-beam1.log | lmj-plot -m \
    '^(\d+) .* training accuracy: (\S+)'

(The nl utility numbers the lines of the input file.)

If you provide three match groups per line, the first is plotted along the abscissa, the second along the ordinate, and the third gives the size of an error bar along the ordinate. Use the --fill-error flag to plot error regions using a shaded polygon instead of bars on the data points.

To get even more sophisticated, name your match groups to specify them in an alternate order. For instance, if your log file had 0.33 +/- 0.01 you could include error bars like so:

nl ~/Experiments/tagger-beam1.log | lmj-plot -m \
  '^(?P<x>\d+) .* training accuracy: (?P<y>\S+) ... (?P<ey>\S+)'

You can specify match groups for x, y, ex (error in the abscissa) and ey (error in the ordinate).

Multiple series

You can also provide multiple input files, and the script will show multiple data series on the same plot:

lmj-plot [--match RE] --input FILE...

By default, each file will use the same regular expression for matching data.

Multiple series from one file

Alternatively, you can specify just one data file and multiple regular expressions. For instance, let’s say you have one log file that contains training accuracy: XX and evaluation accuracy: XX lines that you’d like to plot. You can grab these lines and put them in separate series on your plot:

lmj-plot -m 'training accuracy: (\S+)' 'evaluation accuracy: (\S+)' \
  --input training.log

In this case, it’s probably easier to pass input to the script using a shell redirection, because the -m option will slurp up anything that comes after it (that’s not itself a flag).


You can smooth the ordinates by using either the -s N (--smooth N) or the -b N (--batch N) options. The --smooth option convolves a rectangular filter over the data values before plotting, which yields smoother curves but has edge effects. The --batch option groups the input data and plots just the mean and standard deviation of each group.

Other options

There are several other command-line options, including some basic controls for the plot colors and styles, X- and Y-axis limits; use --help to get an overview.

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(14.7 kB) Copy SHA256 Hash SHA256
Wheel 2.7 Feb 9, 2015
(14.7 kB) Copy SHA256 Hash SHA256
Wheel 3.4 Feb 9, 2015
(12.8 kB) Copy SHA256 Hash SHA256
Source None Feb 9, 2015

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers