summaryrefslogtreecommitdiff
path: root/snakegame/pngchart.py
diff options
context:
space:
mode:
Diffstat (limited to 'snakegame/pngchart.py')
-rw-r--r--snakegame/pngchart.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/snakegame/pngchart.py b/snakegame/pngchart.py
new file mode 100644
index 0000000..5428718
--- /dev/null
+++ b/snakegame/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()
+