Over a million developers have joined DZone.

Python 3: Create Sparklines Using matplotlib

DZone 's Guide to

Python 3: Create Sparklines Using matplotlib

I had the code to create sparklines inside a Pandas DataFrame, but I had to tweak it a bit to get it to play nicely with Python 3.6. Here's what I did.

· Big Data Zone ·
Free Resource

I recently wanted to create sparklines to show how some values were changing over time. In addition, I wanted to generate them as images on the server rather than introducing a JavaScript library.

Chris Seymour’s excellent gist, which shows how to create sparklines inside a Pandas DataFrame, got me most of the way there. But I had to tweak his code a bit to get it to play nicely with Python 3.6.

This is what I ended up with:

import matplotlib
import matplotlib.pyplot as plt
import base64
from io import BytesIO
def sparkline(data, figsize=(4, 0.25), **kwags):
    Returns a HTML image tag containing a base64 encoded sparkline style plot
    data = list(data)
    fig, ax = plt.subplots(1, 1, figsize=figsize, **kwags)
    for k,v in ax.spines.items():
    plt.plot(len(data) - 1, data[len(data) - 1], 'r.')
    ax.fill_between(range(len(data)), data, len(data)*[min(data)], alpha=0.1)
    img = BytesIO()
    plt.savefig(img, transparent=True, bbox_inches='tight')
    return base64.b64encode(img.read()).decode("UTF-8")

I had to change the class used to write the image from StringIO to BytesIO, and I found I needed to decode the bytes produced if I wanted it to display in an HTML page.

This is how you would call the above function:

if __name__ == "__main__":
    values = [
    with open("/tmp/foo.html", "w") as file:
        for value in values:
            file.write('<div><img src="data:image/png;base64,{}"/></div>'.format(sparkline(value)))

And the HTML page looks like this:

2017 09 23 07 49 32

That was easy!

big data ,python ,data analytics ,sparklines ,matplotlib ,tutorial

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}