diff --git a/pygal/__init__.py b/pygal/__init__.py index e9590d1..2982fe0 100644 --- a/pygal/__init__.py +++ b/pygal/__init__.py @@ -40,6 +40,8 @@ from pygal.graph.histogram import Histogram from pygal.graph.horizontalbar import HorizontalBar from pygal.graph.horizontalstackedbar import HorizontalStackedBar from pygal.graph.line import Line +from pygal.graph.horizontalline import HorizontalLine +from pygal.graph.horizontalstackedline import HorizontalStackedLine from pygal.graph.pie import Pie from pygal.graph.pyramid import Pyramid, VerticalPyramid from pygal.graph.radar import Radar diff --git a/pygal/graph/horizontalline.py b/pygal/graph/horizontalline.py new file mode 100644 index 0000000..d484427 --- /dev/null +++ b/pygal/graph/horizontalline.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# This file is part of pygal +# +# A python svg graph plotting library +# Copyright © 2012-2015 Kozea +# +# This library is free software: you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# This library is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with pygal. If not, see . + +"""Horizontal line graph""" + +from pygal.graph.line import Line +from pygal.graph.horizontal import HorizontalGraph + + +class HorizontalLine(HorizontalGraph, Line): + + """Horizontal Line graph""" + + def _plot(self): + """Draw the lines in reverse order""" + for serie in self.series[::-1]: + self.line(serie) + for serie in self.secondary_series[::-1]: + self.line(serie, True) diff --git a/pygal/graph/horizontalstackedline.py b/pygal/graph/horizontalstackedline.py new file mode 100644 index 0000000..1195a9f --- /dev/null +++ b/pygal/graph/horizontalstackedline.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# This file is part of pygal +# +# A python svg graph plotting library +# Copyright © 2012-2015 Kozea +# +# This library is free software: you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) any +# later version. +# +# This library is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with pygal. If not, see . + +"""Horizontal Stacked Line graph""" + +from pygal.graph.stackedline import StackedLine +from pygal.graph.horizontal import HorizontalGraph + + +class HorizontalStackedLine(HorizontalGraph, StackedLine): + + """Horizontal Stacked Line graph""" + + def _plot(self): + """Draw the lines in reverse order""" + for serie in self.series[::-1]: + self.line(serie) + for serie in self.secondary_series[::-1]: + self.line(serie, True) diff --git a/pygal/graph/line.py b/pygal/graph/line.py index baf17d8..bb0951a 100644 --- a/pygal/graph/line.py +++ b/pygal/graph/line.py @@ -148,9 +148,14 @@ class Line(Graph): def _compute(self): """Compute y min and max and y scale and set labels""" # X Labels - self._x_pos = [ - x / (self._len - 1) for x in range(self._len) - ] if self._len != 1 else [.5] # Center if only one value + if self.horizontal: + self._x_pos = [ + x / (self._len - 1) for x in range(self._len) + ][::-1] if self._len != 1 else [.5] # Center if only one value + else: + self._x_pos = [ + x / (self._len - 1) for x in range(self._len) + ] if self._len != 1 else [.5] # Center if only one value self._points(self._x_pos) diff --git a/pygal/test/test_config.py b/pygal/test/test_config.py index 4beda58..5d43325 100644 --- a/pygal/test/test_config.py +++ b/pygal/test/test_config.py @@ -23,6 +23,7 @@ from pygal import ( Line, Dot, Pie, Treemap, Radar, Config, Bar, Funnel, Histogram, Gauge, Box, XY, Pyramid, HorizontalBar, HorizontalStackedBar, + HorizontalStackedLine, HorizontalLine, DateTimeLine, TimeLine, DateLine, TimeDeltaLine) from pygal.graph.map import BaseMap from pygal.graph.horizontal import HorizontalGraph @@ -434,6 +435,7 @@ def test_y_label_major(Chart): if Chart in ( Pie, Treemap, Funnel, Dot, Gauge, Histogram, Box, HorizontalBar, HorizontalStackedBar, + HorizontalStackedLine, HorizontalLine, Pyramid, DateTimeLine, TimeLine, DateLine, TimeDeltaLine ) or issubclass(Chart, BaseMap):