VOOZH about

URL: https://dzone.com/articles/python-3-create-sparklines-using-matplotlib

⇱ Python 3: Create Sparklines Using matplotlib


Related

  1. DZone
  2. Coding
  3. Languages
  4. Python 3: Create Sparklines Using matplotlib

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.

By Oct. 06, 17 · Tutorial
Likes
Comment
Save
9.1K Views

Join the DZone community and get the full member experience.

Join For Free

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
matplotlib.use("Agg")
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)
 ax.plot(data)
 for k,v in ax.spines.items():
 v.set_visible(False)
 ax.set_xticks([])
 ax.set_yticks([])
 
 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')
 img.seek(0)
 plt.close()
 
 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 = [
 [1,2,3,4,5,6,7,8,9,10],
 [7,10,12,18,2,8,10,6,7,12],
 [10,9,8,7,6,5,4,3,2,1]
 ]
 
 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.png

That was easy!

Python (language) Matplotlib

Published at DZone with permission of Mark Needham. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • From Static to Interactive: Exploring Python's Finest Data Visualization Tools
  • How To Use Pandas and Matplotlib To Perform EDA In Python
  • Introducing RAI Audit Kit: Evidence-Grade Responsible AI Audits in Python
  • I Was Tired of Flying Blind With AI Agents, So I Built AgentDog

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

Let's be friends: