From 9d65a3fdc49858895dcefecd7b53534c297a25c4 Mon Sep 17 00:00:00 2001 From: Peter Ward Date: Thu, 29 Oct 2009 20:29:54 +1100 Subject: Added PNG charts. --- pngchart.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pngchart.py (limited to 'pngchart.py') diff --git a/pngchart.py b/pngchart.py new file mode 100644 index 0000000..5428718 --- /dev/null +++ b/pngchart.py @@ -0,0 +1,53 @@ +from pngcanvas import PNGCanvas + +try: + from itertools import izip as zip +except ImportError: + pass + +class SimpleLineChart(object): + def __init__(self, width, height, colours=None, legend=None): + self.canvas = PNGCanvas(width, height) + + self.width = width + self.height = height + + self.colours = colours + self.legend = legend + + self.series = [] + + def add_data(self, series): + self.series.append(series) + + def render(self): + max_width = max(map(len, self.series)) + max_height = max(map(max, self.series)) + x_scale = float(self.width) / max_width + y_scale = float(self.height) / max_height + + data = zip(self.series, self.colours or [], self.legend or []) + for series, colour, legend in data: + colour = int(colour, 16) + self.canvas.color = ( + colour>>16 & 0xff, + colour>>8 & 0xff, + colour & 0xff, + 0xff, + ) + last = None + for x, y in enumerate(series): + if y is not None: + y = self.height - y * y_scale + if last is not None: + x *= x_scale + self.canvas.line(x - x_scale, last, x, y) + last = y + + def download(self, filename): + self.render() + + f = open(filename, 'wb') + f.write(self.canvas.dump()) + f.close() + -- cgit v1.2.3