def test_custom(self): class Obj(object): def __init__(self, a, b, c): self.a = a self.b = b self.c = c data = [Obj('foo', 1, 4), Obj('bar', 2, 5), Obj('baz', 3, 6)] with self.assertRaises(TypeError): series = leather.Series(data) with self.assertRaises(TypeError): series = leather.Series(data, x='words', y='more') def get_x(row, i): return row.b def get_y(row, i): return row.c series = leather.Series(data, x=get_x, y=get_y) self.assertSequenceEqual(series.values(X), [1, 2, 3]) self.assertSequenceEqual(series.values(Y), [4, 5, 6])
def test_validate(self): series = leather.Series([('foo', 1)]) self.shape.validate_series(series) series = leather.Series([(1, 'foo')]) with self.assertRaises(ValueError): self.shape.validate_series(series)
def test_lists(self): data = [('foo', 1, 4), ('bar', 2, 5), ('baz', 3, 6)] series = leather.Series(data) self.assertSequenceEqual(series.values(X), ['foo', 'bar', 'baz']) self.assertSequenceEqual(series.values(Y), [1, 2, 3]) series = leather.Series(data, x=2, y=0) self.assertSequenceEqual(series.values(X), [4, 5, 6]) self.assertSequenceEqual(series.values(Y), ['foo', 'bar', 'baz']) with self.assertRaises(TypeError): series = leather.Series(data, x='words')
def test_pairs(self): data = [('foo', 1), ('bar', 2), ('baz', 3)] series = leather.Series(data) self.assertSequenceEqual(series.values(X), ['foo', 'bar', 'baz']) self.assertSequenceEqual(series.values(Y), [1, 2, 3])
def test_nulls(self): series = leather.Series([(0, 0), (None, None), (10, 10)], self.shape) group = self.shape.to_svg(200, 100, self.linear, self.linear, series) paths = list(group) self.assertEqual(len(paths), 2)
def test_ordinal(self): series = leather.Series([('foo', 0), ('bar', 5), ('bing', 10)]) group = self.shape.to_svg(200, 100, self.ordinal, self.linear, series, self.palette) paths = list(group) self.assertEqual(len(paths), 1)
def test_linear(self): series = leather.Series([(0, 0), (5, 5), (10, 10)]) group = self.shape.to_svg(200, 100, self.linear, self.linear, series, self.palette) paths = list(group) self.assertEqual(len(paths), 1)
def test_nulls(self): series = leather.Series([(0, 0), (None, None), (10, 10)], self.shape) group = self.shape.to_svg(200, 100, self.linear, self.linear, series) circles = list(group) self.assertEqual(len(circles), 2) self.assertEqual(float(circles[1].get('cx')), 200) self.assertEqual(float(circles[1].get('cy')), 0)
def test_linear(self): series = leather.Series([(0, 0), (5, 5), (10, 10)], self.shape) group = self.shape.to_svg(200, 100, self.linear, self.linear, series) circles = list(group) self.assertEqual(len(circles), 3) self.assertEqual(float(circles[1].get('cx')), 100) self.assertEqual(float(circles[1].get('cy')), 50)
def test_nulls(self): series = leather.Series([('foo', 0), (None, None), ('bing', 10)]) group = self.shape.to_svg(200, 100, self.ordinal, self.linear, series, self.palette) rects = list(group) self.assertEqual(len(rects), 2) self.assertEqual(float(rects[1].get('y')), 0) self.assertEqual(float(rects[1].get('height')), 100)
def test_nulls(self): series = leather.Series([(0, 'foo'), (None, None), (10, 'bing')]) group = self.shape.to_svg(200, 100, self.linear, self.ordinal, series, self.palette) rects = list(group) self.assertEqual(len(rects), 2) self.assertEqual(float(rects[1].get('x')), 0) self.assertEqual(float(rects[1].get('width')), 200)
def test_ordinal(self): series = leather.Series([('foo', 0), ('bar', 5), ('bing', 10)]) group = self.shape.to_svg(200, 100, self.ordinal, self.linear, series, self.palette) circles = list(group) self.assertEqual(len(circles), 3) self.assertEqual(float(circles[1].get('cx')), 100) self.assertEqual(float(circles[1].get('cy')), 50)
def test_to_svg(self): series = leather.Series([('foo', 0), ('bar', 5), ('bing', 10)], self.shape) group = self.shape.to_svg(200, 100, self.ordinal, self.linear, series) rects = list(group) self.assertEqual(len(rects), 3) self.assertEqual(float(rects[1].get('y')), 50) self.assertEqual(float(rects[1].get('height')), 50)
def test_to_svg(self): series = leather.Series([(0, 'foo'), (5, 'bar'), (10, 'bing')], self.shape) group = self.shape.to_svg(200, 100, self.linear, self.ordinal, series) rects = list(group) self.assertEqual(len(rects), 3) self.assertEqual(float(rects[1].get('x')), 0) self.assertEqual(float(rects[1].get('width')), 100)
def test_dicts(self): data = [{ 'a': 'foo', 'b': 1, 'c': 4 }, { 'a': 'bar', 'b': 2, 'c': 5 }, { 'a': 'baz', 'b': 3, 'c': 6 }] with self.assertRaises(KeyError): series = leather.Series(data) series = leather.Series(data, x='c', y='a') self.assertSequenceEqual(series.values(X), [4, 5, 6]) self.assertSequenceEqual(series.values(Y), ['foo', 'bar', 'baz'])
import leather import math import csv chart = leather.Chart('Income vs. health') with open('data.csv', 'r') as csvfile: reader = csv.DictReader(csvfile) data = list(reader) def size_dot_by_area(x, y, i): return math.sqrt(int(data[i]['population'])) / 1000 dots = leather.Dots('rgba(0,0,0,0.5)', radius=size_dot_by_area) series = leather.Series(data, dots, x=lambda row, i: math.log(float(row['income'])), y=lambda row, i: float(row['health'])) chart.add_series(series) chart.set_x_axis(leather.Axis(name='Log GDP per capita')) chart.set_y_axis(leather.Axis(name='Life expectancy in years')) chart.to_svg('chart.svg')