Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions pygal/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@

from copy import deepcopy

from pygal import formatters
from pygal.interpolate import INTERPOLATIONS
from pygal.style import DefaultStyle, Style
from pygal import formatters


CONFIG_ITEMS = []
callable = type(lambda: 1)
Expand Down Expand Up @@ -258,6 +257,12 @@ class Config(CommonConfig):
str)

# Look #
clockwise = Key(
False, bool, "Look",
"Clockwise",
"Set to True to make the gauge clockwise."
)

title = Key(
None, str, "Look",
"Graph title.", "Leave it to None to disable title.")
Expand Down
31 changes: 28 additions & 3 deletions pygal/graph/gauge.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

from pygal._compat import is_str
from pygal.graph.graph import Graph
from pygal.util import alter, compute_scale, cut, decorate
from pygal.util import alter, compose, compute_scale, cut, decorate
from pygal.view import PolarThetaLogView, PolarThetaView


Expand All @@ -45,6 +45,11 @@ def _set_view(self):
self.height - self.margin_box.y,
self._box)

def clockwiser(self, point):
x_0, _ = self.view((0, 90))
new_x = 2*x_0 - point[0]
return (new_x, point[1])

def needle(self, serie):
"""Draw a needle for each value"""
serie_node = self.svg.serie(serie)
Expand All @@ -53,7 +58,11 @@ def needle(self, serie):
continue

def point(x, y):
return '%f %f' % self.view((x, y))
if self.clockwise:
transform = compose(self.clockwiser, self.view)
else:
transform = self.view
return '%f %f' % transform((x, y))

val = self._format(serie, i)
metadata = serie.metadata.get(i)
Expand All @@ -75,18 +84,24 @@ def point(x, y):
if self.logarithmic:
w = min(w, self._min - self._min * 10 ** -10)

sweep_flag = '0' if self.clockwise else '1'

alter(
self.svg.node(
gauges, 'path', d='M %s L %s A %s 1 0 1 %s Z' % (
gauges, 'path', d='M %s L %s A %s 1 0 %s %s Z' % (
point(.85, theta),
point(self.needle_width, theta - w),
'%f %f' % (self.needle_width, self.needle_width),
sweep_flag,
point(self.needle_width, theta + w),
),
class_='line reactive tooltip-trigger'),
metadata)

x, y = self.view((.75, theta))
if self.clockwise:
x, y = self.clockwiser((x, y))

self._tooltip_data(
gauges, val, x, y,
xlabel=self._get_x_label(i))
Expand All @@ -96,6 +111,14 @@ def _y_axis(self, draw_axes=True):
"""Override y axis to plot a polar axis"""
axis = self.svg.node(self.nodes['plot'], class_="axis x gauge")

if self.clockwise:
for i in range(int(len(self._y_labels)/2)):
(label_1, theta_1) = self._y_labels[i]
(label_2, theta_2) = self._y_labels[len(self._y_labels)-i-1]
temp_theta = theta_2
self._y_labels[len(self._y_labels)-i-1] = (label_2, theta_1)
self._y_labels[i] = (label_1, temp_theta)

for i, (label, theta) in enumerate(self._y_labels):
guides = self.svg.node(axis, class_='guides')

Expand All @@ -112,6 +135,7 @@ def _y_axis(self, draw_axes=True):
else ''))

x, y = self.view((.9, theta))

self.svg.node(
guides, 'text',
x=x,
Expand Down Expand Up @@ -149,6 +173,7 @@ def _compute_y_labels(self):
self.min_, self.max_, self.logarithmic,
self.order_min, self.min_scale, self.max_scale
)

if self.y_labels:
self._y_labels = []
for i, y_label in enumerate(self.y_labels):
Expand Down
9 changes: 4 additions & 5 deletions pygal/graph/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,13 @@

from math import ceil, cos, sin, sqrt

from pygal import stats
from pygal._compat import is_list_like, is_str, to_str
from pygal.graph.public import PublicApi
from pygal.interpolate import INTERPOLATIONS
from pygal import stats
from pygal.util import (
cached_property, compute_scale, cut, decorate,
get_text_box, get_texts_box, majorize, rad, reverse_text_len,
split_title, truncate, filter_kwargs)
from pygal.util import (cached_property, compute_scale, cut, decorate,
filter_kwargs, get_text_box, get_texts_box, majorize,
rad, reverse_text_len, split_title, truncate)
from pygal.view import LogView, ReverseView, View, XYLogView


Expand Down
5 changes: 2 additions & 3 deletions pygal/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@

import re
from decimal import Decimal
from math import ceil, cos, floor, log10, pi, sin

from math import ceil, floor, log10, pi, cos, sin

from pygal._compat import to_unicode, u, _ellipsis
from pygal._compat import _ellipsis, to_unicode, u


def float_format(number):
Expand Down