diff --git a/leather/scales/ordinal.py b/leather/scales/ordinal.py index d85d218..ee42082 100644 --- a/leather/scales/ordinal.py +++ b/leather/scales/ordinal.py @@ -28,7 +28,11 @@ def project(self, value, range_min, range_max): segments = len(self._domain) segment_size = (range_max - range_min) / segments - pos = range_min + (self._domain.index(value) * segment_size) + (segment_size / 2) + + try: + pos = range_min + (self._domain.index(value) * segment_size) + (segment_size / 2) + except ValueError: + raise ValueError('Value "%s" is not present in Ordinal scale domain' % value) return pos @@ -44,8 +48,11 @@ def project_interval(self, value, range_min, range_max): segment_size = (range_max - range_min) / segments gap = segment_size / Decimal(20) - a = range_min + (self._domain.index(value) * segment_size) + gap - b = range_min + ((self._domain.index(value) + 1) * segment_size) - gap + try: + a = range_min + (self._domain.index(value) * segment_size) + gap + b = range_min + ((self._domain.index(value) + 1) * segment_size) - gap + except ValueError: + raise ValueError('Value "%s" is not present in Ordinal scale domain' % value) return (a, b) diff --git a/leather/series/base.py b/leather/series/base.py index 9feaa32..c5790e5 100644 --- a/leather/series/base.py +++ b/leather/series/base.py @@ -6,7 +6,7 @@ import six from leather.data_types import DataType -from leather.utils import X, Y, Datum +from leather.utils import DIMENSION_NAMES, X, Y, Datum class Series(object): @@ -51,8 +51,8 @@ def __init__(self, data, x=None, y=None, name=None): ] self._types = [ - self._infer_type(self._keys[X]), - self._infer_type(self._keys[Y]) + self._infer_type(X), + self._infer_type(Y) ] def _make_key(self, key): @@ -64,10 +64,12 @@ def _make_key(self, key): else: return lambda row, index: row[key] - def _infer_type(self, key): + def _infer_type(self, dimension): """ Infer the datatype of this column by sampling the data. """ + key = self._keys[dimension] + for i, row in enumerate(self._data): v = key(row, i) @@ -75,7 +77,7 @@ def _infer_type(self, key): break if v is None: - raise ValueError('All values in dimension were null.') + raise ValueError('All values in %s dimension are null.' % DIMENSION_NAMES[dimension]) return DataType.infer(v) diff --git a/leather/series/category.py b/leather/series/category.py index cce52fa..c575308 100644 --- a/leather/series/category.py +++ b/leather/series/category.py @@ -56,9 +56,9 @@ def __init__(self, data, x=None, y=None, z=None, name=None): ] self._types = [ - self._infer_type(self._keys[X]), - self._infer_type(self._keys[Y]), - self._infer_type(self._keys[Z]) + self._infer_type(X), + self._infer_type(Y), + self._infer_type(Z) ] def data(self): diff --git a/test.py b/test.py index 2c0deb0..9792f45 100644 --- a/test.py +++ b/test.py @@ -22,8 +22,7 @@ data1 = [ (2, None), - (6, None), - (9, None) + (3, None) ] chart = leather.Chart()