From c6324cc8e9fb5855f739507713abe81687de0363 Mon Sep 17 00:00:00 2001 From: chartique Date: Fri, 29 Jan 2016 08:03:53 -0500 Subject: [PATCH 1/3] Added options for Horizontal Line Charts --- pygal/__init__.py | 1 + pygal/graph/horizontalline.py | 35 ++++++++++++++++++++++++++++ pygal/graph/horizontalstackedline.py | 35 ++++++++++++++++++++++++++++ pygal/graph/line.py | 11 ++++++--- 4 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 pygal/graph/horizontalline.py create mode 100644 pygal/graph/horizontalstackedline.py diff --git a/pygal/__init__.py b/pygal/__init__.py index e9590d1..5e93056 100644 --- a/pygal/__init__.py +++ b/pygal/__init__.py @@ -40,6 +40,7 @@ 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.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) From c271f10e7787bb93d9e4ad7a7d9105d7c3d42ff8 Mon Sep 17 00:00:00 2001 From: chartique Date: Fri, 29 Jan 2016 08:06:03 -0500 Subject: [PATCH 2/3] Added options for Horizontal Line Charts --- pygal/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pygal/__init__.py b/pygal/__init__.py index 5e93056..2982fe0 100644 --- a/pygal/__init__.py +++ b/pygal/__init__.py @@ -41,6 +41,7 @@ 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 From d0645dfa5f078cf0bd2e364afa6a936a93c8b05d Mon Sep 17 00:00:00 2001 From: chartique Date: Fri, 29 Jan 2016 13:49:40 -0500 Subject: [PATCH 3/3] Added options for Horizontal Line Charts --- pygal/test/test_config.py | 2 ++ 1 file changed, 2 insertions(+) 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):