From c6324cc8e9fb5855f739507713abe81687de0363 Mon Sep 17 00:00:00 2001 From: chartique Date: Fri, 29 Jan 2016 08:03:53 -0500 Subject: [PATCH] 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)