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])
Esempio n. 2
0
    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])
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
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)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 12
0
    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)
Esempio n. 13
0
    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)
Esempio n. 14
0
    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')